У меня есть модель с двумя объектами: RealEstate и Container
Объект контейнеров уже сохранен в постоянном хранилище со следующей иерархией:
Container 1
Container 2
Container 3
Container 4
Container 5
Container 6
Каждый контейнер имеет владельца RealEstate (в данной иерархии realEstate всегда одинаково)
Теперь я хотел бы создать копию этой иерархии, изменяя для каждого контейнера владельца realEstate.
После некоторых испытаний мне кажется, что это не тривиальная проблема.
Это упрощенная схема модели:
RealEstate (entity)
-------------------
name (string attribute)
containers (relation)
Container (entity)
------------------
level (int attribute)
name (string attribute)
parent (self relation to another container)
subcontainers (relation - set of containers)
realEstate (relation)
В основном каждый контейнер имеет отношение подконтейнеров к себе и родительское отношение, например,
Контейнер 1 не имеет родителя, но подконтейнеры = [контейнер 2, контейнер 3] и т. Д. *
У меня есть 2 вопроса:
- если я хочу скопировать один атрибут (NSNumber), я должен скопировать атрибут перед тем, как назначить его скопированному контейнеру с чем-то вроде [newContainer setLevel: [[уровень контейнера] copy]], потому что NSNumber на самом деле является указателем, или это нормально назначить [newContainer setLevel: [уровень контейнера]] ??
- как скопировать отношение ?? Я не могу просто скопировать субконтейнеры с помощью [newContainer setSubcontainers: [контейнерные субконтейнеры]] !!
Вот что я делаю:
- (void)copyContainersFromRealEstate:(RealEstate *)sourceRealEstate toRealEstate:(RealEstate *)destinationRealEstate {
// read all RealEstate Containers to copy
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"realEstate == %@", sourceRealEstate];
[request setPredicate:predicate];
[request setEntity: [ NSEntityDescription entityForName:@"Container"
inManagedObjectContext:destinationRealEstate.managedObjectContext] ];
NSError *error;
NSArray *results = [destinationRealEstate.managedObjectContext executeFetchRequest:request
error:&error];
if (results == nil) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[request release];
// *******************************************************
// copy each caontainer changing the real estate
Container *newContainer;
for (Container *container in results) {
newContainer = (Container *)[NSEntityDescription insertNewObjectForEntityForName:@"Container"
inManagedObjectContext:destinationRealEstate.managedObjectContext];
[newContainer setRealEstate:destinationRealEstate];
[newContainer setLevel:[container level]];
[newContainer setSubcontainers:[container subcontainers]]; // WRONG
[newContainer setName:[container name]];
[newContainer setParent:[container parent]]; // WRONG
}
// *******************************************************
}
Любая помощь будет оценена.
Спасибо