Создание, но не сохранение 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";
Другие вопросы по тегам