Создание, но не сохранение NSManagedObjects
Итак, я создал подкласс NSManagedObject, и теперь я хочу создать временный клон экземпляра, но не хочу его сохранять. Как мне это сделать?
Вот грубый пример, где Person является подклассом NSManagedObject.
Person *billy = [Person initWithStuff:stuff];
Мы инициализируем billy и сохраняем billy в контексте.
Person *bobby = billy;
bobby.name = @"Bobby";
Мы создаем Бобби и модифицируем один атрибут.
Но теперь я не хочу, чтобы изменения в Бобби сохранялись в Билли, и я не хочу сохранять Бобби в контексте.
Как мне это сделать?
2 ответа
Во-первых, не называй Билли Бобби таким. Вы не создаете клон, вы просто создаете другой указатель на тот же объект в памяти.
Если вы хотите создать новый Person
Затем вы должны создать его с соответствующим инициализатором, а затем скопировать атрибуты из Билли в Бобби. Оттуда вы можете использовать новый Бобби Person
, Сохранять это зависит от вас.
То, что вы хотите сделать, это копия объекта. Что вы сделали, это создали второй указатель, который указывает на тот же объект. Второе, что вы хотите сделать, это создать NSManagedObject без контекста.
Для обычного копирования объекта вы должны реализовать протокол NSCopying с помощью метода copyWithZone, но это невозможно, поскольку 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";