所以我最近升级到 XCode 4.2,部分原因是我需要 IOS 5 SDK。
无论如何,当我编译并尝试运行我的应用程序时,我发现它不再运行。这是因为 Core Data 实体中的属性现在以某种方式标记为只读。
我没有这样做,除了错误消息之外,我找不到任何证据。
在我的核心数据托管对象中,称为注:
@interface Note : NSManagedObject
@property (nonatomic, retain) NSString * title;
...
@implementation Note
@dynamic title;
...
后来 - 和其他地方 - 在代码中,我尝试这样做:
self.note.title=self.noteTitle.text;
当执行到达这一行时,我收到以下错误:
Property 'title' is marked readonly on class 'Note'. Cannot generate a setter method for it.
-[Note setTitle:]: unrecognized selector sent to instance 0x80ae3d0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Note setTitle:]: unrecognized selector sent to instance 0x80ae3d0'
什么????我可以手动编码 setter - 错误说它无法为我生成一个 - 但我真的很想了解这里发生了什么。
我确实为这个实体重新生成了托管对象文件,但它不起作用。我也创建了一个新的数据模型,并检查以确保没有设置不应该设置的内容。
编辑:我遗漏了一个重要的花絮:我在 Note (托管对象)上定义了一个类别。在类别中,我为对象添加了一个协议(protocol)(MKAnnotation)。我的类别是这样定义的:
@interface Note (Extras) <MKAnnotation>
我已经删除了协议(protocol)的“需要”,但没有删除引用。当我这样做时,一切都回到了应有的状态。
因此,当我解决了我的问题时,我想知道:将协议(protocol)添加到托管对象是不好的行为吗?
谢谢。
最佳答案
MKAnnotation
协议(protocol)有一个只读的 title
属性(property):
@property (nonatomic, readonly, copy) NSString *title
..这与您的同名动态属性冲突。
(来源:Apple, MKAnnotation Protocol Reference)
关于objective-c - 奇怪的 XCode 4.2 和核心数据行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7793161/