Core Data のテストを行っています。たとえば、navigationBar と addButton を備えた mainViewController があるとします。addButton をクリックすると、detailViewController が開きます。保存を押して新しいオブジェクトを挿入すると、detailVieController が閉じて、新しいデータが挿入されたテーブルが表示されます。それを行うには2つの異なる方法を考えることができます。
最初の方法- ManagedObjectContext を渡す 追加ボタンのアクションで、新しい detailViewController のインスタンスを作成し、それに managedObjectContext を渡します。そのため、コンテキストの保存を処理してからコントローラーをポップする detailViewController の保存ボタンになります。
これは、MainViewController の addButton によって呼び出されるメソッドです。
-(void)addNewObject{
DetailViewController *detVC = [DetailViewController alloc]initWhit:self.managedObjectCOntext];
[self.navigationcontroller pushViewController:detVC animated:YES];
}
このメソッドは、IngredientViewController の保存ボタンによって呼び出されます。
-(void)saveObject{
NSError *error;
if (![self.managedObjectContext save:&error]){
NSLog(@"Error");
}
}
2 番目の方法- デリゲートの使用 addButton のアクションで、DetailViewController のインスタンスを作成し、それをデリゲートとして設定します。そのため、DetailViewCOntroller の保存ボタンを押すと、データをメイン コントローラーに渡すデリゲートが呼び出されます。
これは、MainViewController の addButton によって呼び出されるメソッドです。
(void)addNewObject{
DetailViewController *detVC = [DetailViewController alloc]init];
detVC.delegate = self;
[self.navigationcontroller pushViewController:detVC animated:YES];
}
このメソッドは、IngredientViewController の保存ボタンによって呼び出されます。
-(void)saveObject{
[self.delegate detailVCdidSaveObject];
}
これは mainViewController に実装されたデリゲートです
detailVCdidSaveObject{
NSError *error;
if (![self.managedObjectContext save:&error]){
NSLog(@"Error");
}
}
------------------------------オブジェクトの受け渡し
生データを DetailViewController に渡してそこにオブジェクトを作成するのが最善ですか、それともオブジェクトのインスタンスをそのデータの設定を処理する DetailViewController に渡すのが最善ですか?
例えば
このようにして、mainVC のオブジェクト インスタンスを 1 つの DetailVC にリンクして、その値を簡単に設定できるようにします
-(void)addObject{
DetailViewController *detailVC =[[DetailViewController alloc]init];
detailVC.delegate = self;
self.object = [NSEntityDescription insertNewObjectForEntityForName:@"Object" inManagedObjectContext:self.managedObjectContext];
detailVC.object = self.object;
[self.navigationController pushViewController:detailVC animated:YES];
}
このようにして生データを渡し、detailVC にインスタンスを作成させます
-(void)addObject{
DetailViewController *detailVC =[[DetailViewController alloc]initWithName:@"objname"];
[self.navigationController pushViewController:detailVC animated:YES];
}
これらのコードは、教育目的の単なる擬似コードです。すべての方法が機能します。どれが最も正しいと思いますか、そしてその理由を知りたいだけです。ありがとう