奇数XCode 4.2&核心数据行为

时间:2011-10-17 11:35:53

标签: objective-c ios xcode core-data nsmanagedobject

所以我最近升级到了XCode 4.2,部分原因是因为我需要IOS 5 SDK。

无论如何,当我编译并尝试运行我的应用程序时,我发现它将不再运行。这是因为Core Data实体中的属性现在以某种方式标记为只读。

我没有这样做,除了错误信息之外,我找不到其他证据。

在我的核心数据托管对象中,名为Note:

@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(托管对象)上定义了一个类别。在该类别中,我向对象添加了一个协议(MKAnnotation)。我的类别是这样定义的:

@interface Note (Extras) <MKAnnotation>

我之后删除了协议的“需要”,但没有删除引用。当我这样做时,一切都恢复到应有的状态。

所以当我解决了我的问题时,我想知道:将协议添加到托管对象是不好的行为?

感谢。

2 个答案:

答案 0 :(得分:4)

MKAnnotation协议具有只读title属性:

@property (nonatomic, readonly, copy) NSString *title

..它与您的动态属性以相同名称冲突。

(资料来源:Apple, MKAnnotation Protocol Reference

答案 1 :(得分:2)

将协议添加到NSManagedObject并不错;你想要的原因有很多。