我有2個實體模型:房地產和集裝箱複製整個對象圖 - 複製關係
容器對象已保存到永久存儲與以下層次:
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屬性因爲NSNumber實際上是一個指針,或者可以分配[newContainer setLevel:[container level]] ??,所以用[newContainer setLevel:[[container level] copy]]重新分配給複製的容器。
- 如何複製關係?我不能簡單地將子容器複製到[newContainer setSubcontainers:[container subcontainers]]!
這是我在做什麼:
- (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
}
// *******************************************************
}
任何幫助將不勝感激。 感謝