所以我创建了一个NSManagedObject的子类,现在我想创建一个实例的临时克隆,但不想保存克隆。我该怎么做?
这是一个粗略的例子,其中Person是NSManagedObject的子类。
observed
我们初始化比利,并将比利保存到上下文中。
AggregateException
我们创建了bobby,并修改了一个属性。
但是现在我不希望对bobby的修改保存到billy,而且我不想将bobby保存到上下文中。
我该怎么做?
答案 0 :(得分:1)
首先,不要像这样把比利引用到鲍比身上。你不是在创建一个克隆,你只是在内存中创建另一个指向同一个对象的指针。
如果要创建新 Person
实体,则需要使用正确的初始化程序创建它,然后将属性从billy复制到bobby。从那里你可以使用新的鲍比Person
。保存它取决于你。
答案 1 :(得分:0)
您要做的是该对象的副本。你所做的是创建一个指向同一个对象的第二个指针。 您要做的第二件事是创建一个没有上下文的NSManagedObject。
要正常复制对象,您将使用方法copyWithZone实现NSCopying协议,但这不可能,因为NSManagedObject不使用普通构造函数。
您可以做的是实施自己的复制方法。
<强> Person.m 强>
- (id)copy {
// Create object
Person *copiedPerson = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:nil];
// Now copy all properties
copiedPerson.name = self.name;
// return object
return copiedPerson;
}
现在你可以这样了。
Person *billy = [Person initWithStuff:stuff];
Person *bobby = [billy copy];
bobby.name = @"Bobby";