В моем приложении есть следующая модель CoreData: Foo имеет много сущностей Bar: Foo <---- >> Bar.
Чтобы добавить новый объект Foo, я создаю новый MOC, в котором я создаю новый экземпляр Foo. Это отображает AddFooViewController. Здесь я могу либо отменить, либо сохранить, либо добавить новый объект Bar для этого созданного объекта Foo. Проблема возникает, когда я добавляю новую сущность Bar.
Позвольте мне объяснить подробно: новая сущность Bar создается в совершенно новом MOC. Затем, когда я решаю сохранить сущность Bar, я пытаюсь объединить «Add Bar MOC» и «Add Foo MOC». Это должно быть сделано с помощью этого кода:
- (IBAction)addNewBar {
BarAddViewController *addViewController = [[BarAddViewController alloc] initWithStyle:UITableViewStyleGrouped];
NSManagedObjectContext *addingContext = [[NSManagedObjectContext alloc] init];
self.addingManagedObjectContext = addingContext;
[addingContext release];
[addingManagedObjectContext setPersistentStoreCoordinator:[self.managedObjectContext persistentStoreCoordinator]];
// Create new bar
Bar *bar = (Bar *)[NSEntityDescription insertNewObjectForEntityForName:@"Bar" inManagedObjectContext:self.addingManagedObjectContext];
bar.creationDate = [NSDate date];
addViewController.delegate = self;
addViewController.bar = bar;
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:addViewController];
[self.navigationController presentModalViewController:navController animated:YES];
[addViewController release];
[navController release];
}
// Delegate method :
- (void)barAddViewController:(BarAddViewController *)controller didFinishWithSave:(BOOL)save {
// Dismiss the modal view to return to the main list
[self dismissModalViewControllerAnimated:YES];
// Save modifications
if (save) {
NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
[dnc addObserver:self
selector:@selector(addBarControllerContextDidSave:)
name:NSManagedObjectContextDidSaveNotification
object:addingManagedObjectContext];
// Assign relationship here ???? foo.bars = bar;
NSError *error;
if (![addingManagedObjectContext save:&error]) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
[dnc removeObserver:self
name:NSManagedObjectContextDidSaveNotification
object:addingManagedObjectContext];
} else {
// Remove bar from addingManagedObjectContext
[self.addingManagedObjectContext deleteObject:controller.bar];
NSError *error;
if (![addingManagedObjectContext save:&error]) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
}
// Release the adding managed object context.
self.addingManagedObjectContext = nil;
}
- (void)addBarControllerContextDidSave:(NSNotification*)saveNotification {
[self.managedObjectContext mergeChangesFromContextDidSaveNotification:saveNotification];
}
Моя проблема в том, что я не знаю, где установить отношения между Фу и Баром. Я знаю, что могу установить связь только между двумя NSManagedObject, которые находятся в одном контексте. Кто-нибудь может мне помочь, пожалуйста?
Заранее спасибо