- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
类中的对象 setter 存在问题。我有 GEOImage 类,其中描述、标题等内容将根据到图像。
@interface GEOImage : UIImage
{
NSString *title;
NSString *imgDescription;
NSString *latitude;
NSString *longitude;
NSDictionary *editInfo;
}
@property (nonatomic, copy) NSString *title, *imgDescription, *latitude, *longitude;
@property (nonatomic, copy) NSDictionary *editInfo;
@end
现在我尝试存储另一个类的描述:
self.chosenImage.imgDescription = @"description";
其中 selectedImage 的类型为 GEOImage。
但我收到错误:
-[UIImage setTitle:]: unrecognized selector sent to instance 0x939d220 2011-12-05 10:59:40.621 GeoPG[511:17c03] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage setTitle:]: unrecognized selector sent to instance 0x939d220'
如果我在调试器中查看,则 selectedImage 不为 NULL,并且它在 ImageView 中显示正确。
问候s4l鱼
最佳答案
我们可以安全地推断出chosenImage
不是nil
;如果它是nil
,那么向它发送消息将不会执行任何操作,也不会崩溃。
(另外,我假设您在使用示例中指的是 title
而不是 imgDescription
,或者您实现了 setImgDescription:
依次设置标题
。)
有两种可能性:
您创建了作为 GEOImage 存储到 chosenImage
的图像,但是当您保留它时它就消失了。随后,在同一地址创建了一个 UIImage(如异常消息中所示),因此您现在仍然持有的指针指向 UIImage。您向它发送了一条仅适用于 GEOImage 的消息,但它只是一个 UIImage,因此它不会响应该消息,这是异常(exception)。
当你持有一个对象时,它死亡的原因是你没有将它保留在你应该保留的地方,或者你将它释放到你不应该保留的地方。或者可能两者兼而有之。
使用 Zombies 模板在 Instruments 下运行您的应用程序。当您遇到此崩溃时,它会升起一个标志,然后您可以通过单击该标志中的按钮进行调查。从末尾开始查看所有的 Release 和 Autorelease 事件,找到不应该出现的事件;然后,如果释放本身是无根据的,请将其取出,或者如果它应该由先前的保留来平衡,则将其中之一放入。
崩溃的一个可能原因是您将 chosenImage
属性声明为 assign
,但您应该将其声明为 retain
/强
。如果这是问题所在,您的 Instruments 调查结果将支持它。
从长远来看,您应该转换为 ARC,这可以消除 90% 可能发生此问题的情况。
仅仅因为您声明 chosenImage
将保存指向 GEOImage 的指针并不意味着它确实如此。您可以在那里分配任何对象指针,并且在许多情况下,编译器不知道它实际上是否不是 GEOImage。
(他们在 Clang 的 future 版本中引入了一项名为“相关结果类型”的功能,这应该会大大降低这种情况的可能性。)
据猜测,我会说你正在做这样的事情:
self.chosenImage = [GEOImage imageNamed:@"blah blah blah"];
或者这个:
self.chosenImage = [imagePicker takePicture];
没有理由期望 takePicture
返回 GEOImage(它怎么知道这就是你想要的?),并且很可能 +[UIImage imageNamed:]
(假设您只是继承它)也不会。除非您自己使用 alloc
和初始化器创建 GEOImage 实例,否则您不能假设您获得的任何 UIImage 都是 GEOImage。
解决方案是轻松地从 UIImage 创建 GEOImage(这将涉及包装 this method ),然后执行此操作。
<小时/>一旦您的 chosenImage
属性中有一个事件的(不是死的)GEOImage(不是 UIImage),它就可以工作。
关于objective-c - UIImage setter NSInvalidArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8383680/
因此,我需要获取在为其赋值时调用的 setter 的名称。像这样: var b = {}; var a = { set hey(value) { b[] = value; } } 我希望 se
我是 Android 编程的新手(~ 2 个月)有必要为几十个不同的变量设置 getter 吗? 例如—— //Yes I realise that this isn't 'dozens' publi
import Control.Lens import Control.Lens.TH data Foo = Foo { _bar, _baz :: Int } makeLenses ''
我有点困惑:我可以覆盖 setter/getter 但仍然使用 super setter/getter 吗?如果是 - 怎么办? 用例: class A { void set value(num
我有一个接收消息的应用程序。消息中存在可编辑的字段。当字段更改时,应将其保存到数据库中。不幸的是,setter 仅在 setter 的范围内更改给定字段的值。知道为什么会发生这种情况吗?这是 gett
C# 中有没有一种方法可以让 setter 从“某物”继承,这样每次为特定基类及其继承者调用 setter 时,我都可以运行一些代码? 我想做的是在我的基类上有一个名为 IsValid 的 bool
可能是一个我无法解决的非常简单的问题 - 我从 C# 开始,需要使用 getter/setter 方法向数组添加值,例如: public partial class Form1 : Form {
这两个属性实现有什么区别? public override string A { get { return "s"; } set { } } public override strin
是否可以使用 abc.abstractproperty 创建一个具体的 getter 但将 setter 抽象为每个继承类的不同。我为每个子类处理不同的 val 设置。 例如。 @abstractpr
我在某处看到类似下面的内容,想知道它是什么意思。我知道他们是getter和setter,但是想知道为什么字符串Type是这样定义的。谢谢你帮助我。 public string Type { get;
Public class Example { private int number; public Example(int number){ this.number =
假设我有这样的代码: public response MyMethod(Request req) { String id = req.getFirst().geId(); } 我已经模拟了主对
允许这样做: public int Age { get; set; } 但是应用程序是否为变量创建/分配空间?我经常这样做 private int age = 0; public int Age {
我有一个条件,我构造字符串 (finalValue) 的方式是基于我在输入中获得的非空值的数量。所以我想知道是否可以用一个不同的参数为字符串 (finalValue) 重载 setter 方法并根据我
例如,在这段代码中 var o = { set a(value) {this.b = value}, get a() {return this.b} } 是否有可能获得对 o.a 的 sett
我一直在努力了解 getter 和 setter,但没有深入了解。我读过 JavaScript Getters and Setters和 Defining Getters and Setters只是没
我想在我的类中添加一个 getter 和 setter。然而,setter 应该接收一个 querySelector,但 getter 返回一个新类型 pageSections。 我的问题是 gett
使用有什么好处: private var _someProp:String; public function set someProp(value:String):void { _somePr
当从域类调用它时,我想在我的 setter 中执行一些操作,而不是从 hibernate 中调用它时。此外,我正在使用 session 工厂,因此我无法使用 @PostLoad 来触发标志! 有人对此
人员类别: public class Person { private String firstName; private String lastName; public Pe
我是一名优秀的程序员,十分优秀!