0
我的应用程序允许用户编辑数据,但保存有可能发生的是两件事情中:CoreData:保存修改的托管对象为新对象
如果数据的名称保持不变,只是将对象保存为编辑后的版本。即他们只是编辑现有的对象。
但是,如果他们改变了名字,这应该创建一个新的实例和编辑的数据恢复到原来的。
显然,1是简单的情况下,工作得很好。但我对冲突的最好方法来处理2.如何最好的是它修改NSManagedObject保存在一个数据库中的新行?
我的应用程序允许用户编辑数据,但保存有可能发生的是两件事情中:CoreData:保存修改的托管对象为新对象
如果数据的名称保持不变,只是将对象保存为编辑后的版本。即他们只是编辑现有的对象。
但是,如果他们改变了名字,这应该创建一个新的实例和编辑的数据恢复到原来的。
显然,1是简单的情况下,工作得很好。但我对冲突的最好方法来处理2.如何最好的是它修改NSManagedObject保存在一个数据库中的新行?
没有明显的办法只有“复制”一个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];
}
谢谢,这是我在做什么,但觉得如此“手册”是我,也许有一些诀窍我失踪。 – MarkPowell
没错,它确实感觉“手动”。 ;-)你可以得到通过使用KVC更高层次的抽象的 - 但它通常是没有必要的。 – Mundi