У меня есть модель с 2-х лиц: RealEstate и контейнерКопирование графа весь объект - скопировать отношение
Контейнеры объект уже сохранены на постоянное хранилище с помощью следующей иерархии:
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) следует скопировать атрибут Befo повторно назначьте его скопированному контейнеру с чем-то вроде [newContainer setLevel: [[container level] copy]], потому что NSNumber на самом деле является указателем, или нормально назначать [newContainer setLevel: [container level]] ??
- как скопировать отношение ??? Я не могу просто скопировать подконтейнеры с помощью [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
}
// *******************************************************
}
Любая помощь будет оценена. Благодаря