Страницы

Поиск по вопросам

понедельник, 13 апреля 2020 г.

Копирование NSManagedObject-подкласса

#objective_c #coredata

                    
Существует некий NSManagedObject-подкласс Visit. Появилась необходимость получить
почти точную копию обьекта - из двадцати полей нужно изменить значение у трех. Можно
ли сделать копию не таким трудоемким процессом как 
....
for(Visit *copiedVisit in arrayOfVisits) // массив обьектов с которых делаются копии
{
    Visit *newVisit = (Visit *)[NSEntityDescription insertNewObjectForEntityForName:@"Visit"
inManagedObjectContext:[self managedObjectContext]];
newVisit.date = [NSDate someNewDate];  // поле которое нужно изменить
newVisit.name = copiedVisit.name;         // далее переприсвоение значений полей
одного объекта = полям     другого
newVisit.attribute = copiedVisit.attribute;
newVisit.time = copiedVisit.time;
...

NSError *err = nil;
if (![self managedObjectContext] save:&err])
 {
    ...
 };
}

а потом переприсвоением значений полей одного объекта полям другого? Некий аналог
copy для NSManagedObject-подкласса?    


Ответы

Ответ 1



Насколько мне известно, у Core Data нет такой возможности из коробки. Мне кажется, вполне уместно определить для вашего класса Visit соответствующий метод -copyWithZone: в котором можно описать всю процедуру порождения копии, и затем пользоваться просто обычным copy, как вы и предполагаете в своем вопросе - только не "аналогом copy", а самым настоящим copy, потому что именно так он и работает - через определение copyWithZone. Смотри мой ответ про клонирование UIView: Objective C: как клонировать UIView? .

Комментариев нет:

Отправить комментарий