如何在 Core Data 中制作 NSManagedObject 的深拷贝

Posted

技术标签:

【中文标题】如何在 Core Data 中制作 NSManagedObject 的深拷贝【英文标题】:How to make Deep Copy of NSManagedObject in Core Data 【发布时间】:2010-09-26 22:00:56 【问题描述】:

我正在尝试复制现有的 NSManagedObject 和 Core Data 中的相关子对象。我似乎找不到一个简单的方法来做到这一点。

我有一个从核心数据数据库填充的 NSArrayController。我想在 selectionIndex 处获取对象并进行深层复制,使其与同一个父对象保持关联并复制所有子对象。

感谢任何帮助!

感谢 TechZen 提供链接。我使用了该站点的示例代码并使用了这个调用代码:

RuleSetVersion *object = [[ruleSetVersionArrayController selectedObjects] lastObject];

NSString *parentEntity = @"RuleSet";

RuleSetVersion *newObject = (RuleSetVersion*)[self copyObject:object toContext:[self managedObjectContext] parent:parentEntity];

[newObject setRuleSetEffectiveDate:[[NSDate alloc] init]];
[newObject setRuleSetVersionLastModifiedDate:[[NSDate alloc] init]];

[newObject setRuleSet:object.ruleSet];

NSError *error;

if ([managedObjectContext save:&error] == NO) 
    [NSApp presentError:error];

【问题讨论】:

【参考方案1】:

它相当复杂。请参阅此答案及其链接的示例代码:

How do I copy or move an NSManagedObject from one context to another?

【讨论】:

感谢您的回复!我看到了那个答案,但它似乎在讨论将对象从一个上下文复制到另一个上下文。如果我只想使用一个上下文,同样的答案是否适用? 事实证明这是可行的,但需要对我的调用代码进行一些重新调整。 URL 提供了执行复制的代码,但并没有真正说明如何正确调用它。我在上面的问题中添加了我的代码。

以上是关于如何在 Core Data 中制作 NSManagedObject 的深拷贝的主要内容,如果未能解决你的问题,请参考以下文章

如何制作 Core Data 对象图的精确副本?

如何组织具有循环依赖的 Core Data 实体?

如何将 NSMutable 数组中的数据存储在 Core Data 中?

如何在 Mac 应用程序中设置初始 Core Data 存储?

如何对 CloudKit/Core Data 进行单元测试?

iPhone 上是不是存在 Core Data?或者您将如何在 iPhone 上保存数据?