【问题标题】:Odd XCode 4.2 & Core Data Behavior奇怪的 XCode 4.2 和核心数据行为
【发布时间】:2011-10-20 06:25:17
【问题描述】:

所以我最近升级到 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'

什么????我可以手动编码设置器 - 错误说它无法为我生成一个 - 但我真的很想了解这里发生了什么。

我确实为这个实体重新生成了托管对象文件,但它不起作用。我也创建了一个新的数据模型,并检查以确保没有设置不应该设置的内容。

编辑:我遗漏了一个重要的花絮:我在 Note(托管对象)上定义了一个类别。在类别中,我为对象添加了一个协议(MKAnnotation)。我的类别是这样定义的:

@interface Note (Extras) <MKAnnotation>

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

所以,虽然我已经解决了我的问题,但我仍然想知道:将协议添加到托管对象是不好的行为吗?

谢谢。

【问题讨论】:

  • 您是否尝试将“标题”属性重命名为其他名称?有时我在使用某些属性名称时会收到错误消息。也许用 noteTitle 试试。
  • 好吧,我可以。在升级之前它工作得很好。我想苹果可能对保留字列表进行了更改,但版本更改相对较小?
  • 我解决了这个问题。我可能没有提到我应该拥有的一切。我已编辑问题以包含额外信息。

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


【解决方案1】:

MKAnnotation 协议有一个只读的title 属性:

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

.. 与您的同名动态属性冲突。

(来源:Apple, MKAnnotation Protocol Reference

【讨论】:

    【解决方案2】:

    NSManagedObject添加协议也不错;您想要这样做的原因有很多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多