创建但不保存NSManagedObjects

时间:2015-10-20 19:06:15

标签: ios core-data nsmanagedobject

所以我创建了一个NSManagedObject的子类,现在我想创建一个实例的临时克隆,但不想保存克隆。我该怎么做?

这是一个粗略的例子,其中Person是NSManagedObject的子类。

observed

我们初始化比利,并将比利保存到上下文中。

AggregateException

我们创建了bobby,并修改了一个属性。

但是现在我不希望对bobby的修改保存到billy,而且我不想将bobby保存到上下文中。

我该怎么做?

2 个答案:

答案 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";