如何在代码中复制Core Data托管对象

Tou*_*int 0 xcode core-data ios

我甚至不确定我是否说明了这一点,但我正在尝试复制用户创建的coredata对象intstance,并且很难搞清楚它.

我有一个对象(问题)从中拉出来managedObjectContext.

这来自我的数据库中有很多问题的测验.

我在内存中有一个名为question1的Question实例.我想将question1复制到一个名为question2的实例.

Question *question2 = question1;
Run Code Online (Sandbox Code Playgroud)

有时工作但有时也崩溃(我知道它不是正确的方法)

我一直在搞乱NSCopying和-(id)copyWithZone:(NSZone *)区域,但我只是得到了一个空白的实例.

如果有人能提供帮助,那将非常感谢!

这里有一些细节.

我有问题1它是问题的一个实例.例如,question1.answer将返回问题的答案.

我想简单地将问题1复制到问题2.我不需要在数据模型中存储question2或者我只需要在循环中使用它然后释放.

基本上我想这样做:

Question *question2 = question1;
NSLog(@"%@", question2.answer)
Run Code Online (Sandbox Code Playgroud)

以上是有时工作但有时我在nslog行上遇到随机崩溃.

Mar*_*n R 6

您必须在托管对象上下文中创建一个新对象,然后复制所有属性和关系:

Question *question2 = [NSEntityDescription
                           insertNewObjectForEntityForName:@"Question"
                           inManagedObjectContext:context];
// Copy attributes:
question2.attr1 = question1.attr1;
question2.attr2 = question1.attr2;
// ...
// Copy relationships:
question2.rel1 = question1.rel1;
// ...
Run Code Online (Sandbox Code Playgroud)

这可以通过使用自动化NSEntityDescriptionquestion1和处理来自实体描述所有属性和关系,看到(大)这个问题的答案:我怎样才能复制或复制核心数据管理对象?.但请注意,该代码也会复制所有相关对象,这些对象可能不是您想要的.

我认为,如果没有太多的属性/关系,"手动"复制更容易,并且您可以决定每个相关对象是否还必须复制.