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