我的应用程序允许用户编辑数据,但在保存期间可能会发生两件事:
如果数据名称保持不变,只需将对象保存为编辑版本即可。即他们只是在编辑现有的对象。
但是,如果他们更改了名称,这应该会创建一个新实例并将已编辑的数据恢复为原始数据。
显然,1 是简单的情况,并且工作得很好。但是我对处理 2 的最佳方法感到矛盾。将修改后的 NSManagedObject 保存为数据库中的新行有多好?
我的应用程序允许用户编辑数据,但在保存期间可能会发生两件事:
如果数据名称保持不变,只需将对象保存为编辑版本即可。即他们只是在编辑现有的对象。
但是,如果他们更改了名称,这应该会创建一个新实例并将已编辑的数据恢复为原始数据。
显然,1 是简单的情况,并且工作得很好。但是我对处理 2 的最佳方法感到矛盾。将修改后的 NSManagedObject 保存为数据库中的新行有多好?
没有明显的方法可以“复制” a 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];
}