CoreData:将已修改的受管对象另存为新对象

时间:2012-10-23 19:35:36

标签: core-data persistence nsmanagedobject

我的应用程序允许用户编辑数据,但在保存期间有两件事情可能发生:

  1. 如果数据名称保持不变,只需将对象保存为已编辑的版本即可。即他们只是在编辑现有的对象。

  2. 但是,如果他们更改了名称,则应创建新实例并将编辑后的数据恢复为原始数据。

  3. 显然,1是容易的情况,工作得很好。但我对最佳处理方法存在冲突2.如何将修改后的NSManagedObject保存为数据库中的新行?

1 个答案:

答案 0 :(得分:1)

没有明显的方法来“复制”NSManagedObject。最强大的方法是简单地从头开始重新创建所有内容。

确保您已将所有已更改的属性分开存储(此处我假设它们位于各种文本字段中,或者它们与现有对象保持不变)。您可以在编辑视图控制器被解除时做出此决定(新实例与否):

if (![nameTextField.text isEqualToString:object.name]) {
   ObjectClass *newObject = [NSEntityDescription 
       insertNewObjectForEntityForName:@"ObjectClass" 
                inManagedObjectContext:self.managedObjectContext];
   newObject.name = nameTextField.text;
   newObject.attribute1 = oldObject.attribute1;
   // or
   newObject.attribute1 = attribute1TextField.text;
   // do this for all attributes
   [self.managedObjectContext save:nil]; 
}