在另一个版本中更改 NSManagedObject 父实体

Posted

技术标签:

【中文标题】在另一个版本中更改 NSManagedObject 父实体【英文标题】:change NSManagedObject parent entity in another version 【发布时间】:2015-05-25 14:55:28 【问题描述】:

有什么好的方法可以在另一个版本中更改 NSManagedObject 的父实体吗? 假设我得到了模型版本 1.1:

anObject - 没有父实体

在 1.2 版中,我想让它继承自

object - 1.1 版中已经存在并包含属性“objectID”的父类

当我更改它的父实体时,应用程序崩溃:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法创建托管对象上下文:持久存储协调器没有任何持久存储。这可能意味着您忘记添加持久存储,或者您尝试这样做失败并出现错误。

this answer 建议在新版本中创建不同名称的新实体,并删除旧实体。 我的问题是这种问题是否有“更清洁”的解决方案? 如何将映射模型添加到项目/当前模型?

【问题讨论】:

【参考方案1】:

好的,解决方法很简单, 您在模型中进行所需的更改(更改“anObject”父实体) 然后你需要做的就是添加一个新的映射模型,选择“新文件”->“核心数据”->“映射模型”

确保在添加新映射模型之前对模型进行更改! 然后选择源数据模型(在我的例子中是 1.1 版)和目标数据模型(1.2),并创建新的映射模型。 对我来说就是这么简单,甚至不需要对新的映射模型进行任何更改。如果有人对使用映射模型的利弊有任何意见,我想在这里。

【讨论】:

有同样的问题,将一些属性移动到父实体,这个解决方案就像一个魅力。

以上是关于在另一个版本中更改 NSManagedObject 父实体的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp NSManagedObject类别,用于在另一个上下文中创建深层副本

Cloudkit + 核心数据不同步

更改 NSManagedObject 上的属性,它会发送通知吗?

如何在块之间访问 NSManagedObject?

当一对多相关的 NSManagedObject 子类发生更改时,如何更新 NSManagedObject 子类?

核心数据 NSManagedObject 更改