2012-10-23 38 views
0

我的应用程序允许用户编辑数据,但保存有可能发生的是两件事情中:CoreData:保存修改的托管对象为新对象

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

  2. 但是,如果他们改变了名字,这应该创建一个新的实例和编辑的数据恢复到原来的。

显然,1是简单的情况下,工作得很好。但我对冲突的最好方法来处理2.如何最好的是它修改NSManagedObject保存在一个数据库中的新行?

回答

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]; 
} 
+0

谢谢,这是我在做什么,但觉得如此“手册”是我,也许有一些诀窍我失踪。 – MarkPowell

+0

没错,它确实感觉“手动”。 ;-)你可以得到通过使用KVC更高层次的抽象的 - 但它通常是没有必要的。 – Mundi