ここで最初の質問です。いろいろ試してみましたが、わかりません。
双方向の対多関係を持つ 2 つのエンティティを含むコア データ
A<<---->>B
A
エンティティには属性として名前があり、関係がありますBs
最初のコントローラーにはすべてのエンティティがリストされ、エンティティA
を追加するための2番目のコントローラーがあり、その関係A
にデフォルトを保存したいと考えています。B
セグエの準備には、次のコードがあります。
if ([[segue identifier] isEqualToString:@"addAEntitySegue"]) {
AddAEntityViewController *addAEntityViewController = [segue destinationViewController];
addAEntityViewController.delegate = self;
addAEntityViewController.managedObjectContext = self.managedObjectContext;
NSManagedObjectContext *addingContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
self.addingManagedObjectContext = addingContext;
[addingManagedObjectContext setPersistentStoreCoordinator:[[fetchedResultsController managedObjectContext] persistentStoreCoordinator]];
addAEntityViewController.A = [NSEntityDescription insertNewObjectForEntityForName:@"A" inManagedObjectContext:addingContext];
UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave
target:addAEntityViewController
action:@selector(save:)];
addAEntityViewController.navigationItem.rightBarButtonItem = saveButton;
}
addAEntityViewController には、これを保存する必要があります
-(IBAction)save:(id)sender
{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"B" inManagedObjectContext:self.managedObjectContext];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@",[defaults objectForKey:@"BDefault"]];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:predicate];
//Set the batch size to a suitable number
[fetchRequest setFetchBatchSize:20];
NSError *error;
self.A.name = textFieldVal;
[self.A addBObject:[[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] objectAtIndex:0]];
NSLog(@"A = %@", self.A.Bs);
[self.delegate addAEntityViewController:self didFinishWithSave:YES];
}
addAEntityViewController
すべてが正しく保存されているステートメントNSLog(@"A = %@", self.A.Bs);
でも、B
. しかし、デリゲートが最初のコントローラー ( AEntityViewController
) に保存すると、リレーションシップは保存されA.name
ず、関係は保存されないためA.Bs
、何が問題なのかわかりません。
デリゲート メソッドは次のとおりです。
-(void) addAEntityViewController:self didFinishWithSave:YES{
if (save) {
NSLog(@"saveworkouts");
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;
}
私が言ったように、A
エンティティは保存されますが、関係は(2番目のビュー)に正しく保存されB
ますが、関係は保存されません。ofはヌルです。B
addAEntityViewController
NSLOg
A.Bs