我的应用程序工作正常,直到我下载新的Xcode,现在它被错误“信号SIGABRT”停止并指出:
[PlaceHolder setDescription:]: unrecognized selector sent to instance 0x79838900
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PlaceHolder setDescription:]: unrecognized selector sent to instance 0x79838900'
我知道,这些信息可能不足以理解发生了什么,但我不知道从哪里开始搜索。如果setter方法有错误,为什么我的应用程序之前有效?是否有任何新的更改阻止应用启动?
PlaceHolder
是一个对象,它包含属性(如图像链接,文本等)。
此外,还有一个新的“黄色”警告 - Auto property synthesis will not synthesize property 'description' because it is 'read-write' but it will be synthesized 'read-only' via another property
答案 0 :(得分:10)
您似乎已定义了description
属性。很遗憾,NSObject
已有description
方法。由于您可能不是故意在子类中尝试覆盖此方法,因此这可能不是一个安全的操作。看起来在iOS 7 SDK和Xcode 5下,您的属性替换了NSObject
上的方法。在iOS 8 SDK和Xcode 6中并非如此(可能是由于-description
方法的定义方式发生了变化),因此您会得到不同的行为。
考虑重命名此属性以避免此类冲突。 description
是一个非常有用的调试工具,您可能不想意外地放弃这个类。
答案 1 :(得分:8)
非常感谢您的帮助。
描述是PlaceHolder类的属性:
@property (nonatomic, retain) NSString *description;
简单地将@synthesize description;
放在PlaceHolder类的实现(.m)文件中解决了问题。出于某种原因,新的Xcode通过"只读"属性,并导致SIGBART错误,因为app尝试写入此属性(由于某种原因只读取)。
我希望这些信息可能对面临类似问题的人有所帮助。