NSManagedObject @dynamic 属性不再被识别

Posted

技术标签:

【中文标题】NSManagedObject @dynamic 属性不再被识别【英文标题】:NSManagedObject @dynamic property not recognized anymore 【发布时间】:2013-02-01 14:32:34 【问题描述】:

我昨天扩展了我的“用户”类,它是 NSManagedObject 的子类。我添加了一个名为“photoPath”的新属性,通常的方式:

@property (nonatomic, retain) NSString * photopath;
@dynamic photoPath;

我添加了新版本的数据模型并成功实施了数据迁移。 一切都很完美!......从现在开始。今天,当我访问我的新属性时,应用程序崩溃并显示:

-[User photoPath]: unrecognized selector sent to instance xxx

从昨天开始没有动过任何代码,我只是关闭并重新打开了 Xcode。

那么,究竟是什么魔力让应用程序在一天内正常工作,第二天就崩溃了?我知道 CoreData 会生成一些文件,例如 .momd。我已经清理了所有东西。有什么建议吗?

似乎coreData停留在旧的对象模型上,我不知道为什么.....

编辑:

当我检查 Project.sqlite 文件时,“photoPath”列甚至不存在。有什么想法吗?

【问题讨论】:

确保“Versioned Core Data Model”下的“Current”值是您创建的新版本。 是的,它当然是好的...谢谢 【参考方案1】:

在更改核心数据模型或子类后,我总是做两件事。 从设备/模拟器中删除应用程序的实例。 清理项目。

【讨论】:

清洁,就像我说的。但我不同意从设备/模拟器中删除实例。应用商店更新必须有效,数据迁移也必须有效。 而删除旧的应用程序,同样的 pb 发生...啊,我没有尝试重新启动!让我们去做吧。【参考方案2】:

好的

当然,在我的 .xdatamodeld(版本化核心数据模型)下,选择了好的版本,我在发布之前已经三重检查了。

但我还是尝试选择旧的,保存,重新选择新的,保存。

而且它有效...

非常感谢 Xcode,这让我花了 2 个小时的时间

编辑:每次我关闭并重新打开我的项目时,问题都会再次出现。在启动应用程序之前,我总是必须执行上述过程。这很烦人。如果有人知道如何更好的解决方案,我会接受他的回答。

【讨论】:

简单但有效。还必须清理和清理构建文件夹。

以上是关于NSManagedObject @dynamic 属性不再被识别的主要内容,如果未能解决你的问题,请参考以下文章

如何为 NSManagedObject 子类编写自定义访问器?

@dynamic 使用的常见情况是啥?

原因:'一个'NSManagedObject'类的NSManagedObject必须有一个有效的NSEntityDescription? [复制]

“NSManagedObject”类的 NSManagedObject 必须具有有效的 NSEntityDescription

NSManagedObject 故障/无法获得由 NSManagedObject 处理的“原始”对象

NSManagedObject - NSSet 被删除?