当对象的上下文不同时,如何制作 NSManagedObject 的浅拷贝?

Posted

技术标签:

【中文标题】当对象的上下文不同时,如何制作 NSManagedObject 的浅拷贝?【英文标题】:How to make a shallow copy of NSManagedObject when objects' contexts differ? 【发布时间】:2011-08-08 05:55:45 【问题描述】:

我正在我的 ios 应用程序中实现“复制”功能。我正在使用以下工作流程:

    在根视图控制器的初始上下文中显示托管对象列表 当用户点击一行时,创建一个新的上下文,将其传递给具有重复托管对象的“详细”视图控制器 ([[DetailController alloc] initWithObject:clonedObject inContext:newContext])。

但是,由于它们的托管对象上下文不同,我正在努力解决从源对象重新分配关系到克隆对象的概念。什么是正确的方法:

    我是不是应该只重新分配指针值而不关心 MOC 或... 我应该根据它们的唯一标识符重新获取新上下文中的值吗? 还有其他我没有想到的选择吗?

附:上下文使用相同的持久存储协调器。

【问题讨论】:

【参考方案1】:

托管对象 ID 是线程安全的。因此,您可以将托管对象 ID 传递给视图控制器中的 MOC,通过 existingObjectWithID:error 检索该对象,然后在该上下文中执行复制。这样,对象永远不会跨越 MOC 边界。

【讨论】:

有什么特殊原因不给用户objectWithID: ObjectWithID 始终返回一个对象,即使该对象是错误的。见cocoawithlove.com/2008/08/…

以上是关于当对象的上下文不同时,如何制作 NSManagedObject 的浅拷贝?的主要内容,如果未能解决你的问题,请参考以下文章

NSManaged Object Context 无法删除对象

如何使用 @selector 和 NSInvocation 从另一个对象调用 NSManaged 对象的 @dynamic 方法?

如何将@NSManaged 对象类中的变量初始化为 JSON 值?

PHPhotos 和核心数据。 PHObject 使用啥 NSManaged 对象类型?

NSManaged 对象 initWithCoder 错误

在 Core Data 中,NSManaged 对象上的 URI 属性类型应该用于啥?