私はProCoreDataの例を見ていましたが、ManagedObjectContextを渡すための良い方法は何であるか疑問に思いました。この本の例では、作成者がAppDelegateでManagedObjectContextを初期化してから、MasterViewControllerでこれを実行しているのがわかります。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.title = NSLocalizedString(@"League Manager", @"League Manager");
id delegate = [[UIApplication sharedApplication] delegate];
self.managedObjectContext = [delegate managedObjectContext];
}
return self;
}
次に、新しいViewControllerがテーブル行の選択からスタックにプッシュされると、これが実行されます。
NSManagedObject *team = [[self fetchedResultsController] objectAtIndexPath:indexPath];
TeamViewController *teamViewController = [[TeamViewController alloc] initWithMasterController:self team:team];
[self presentModalViewController:teamViewController animated:YES];
StoryBoardsを使用すると、そのタイプのinitメソッドは表示されなくなります。私はprepareForSegueが主に使用されているのを見て、Beginning iOS 5 Developmentの本を見ると、作者は次のようなことをするでしょう。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
UIViewController *destination = ((UINavigationController *)segue.destinationViewController).topViewController;
if ([destination respondsToSelector:@selector(setDelegate:)]) {
[destination setValue:self forKey:@"delegate"];
}
クラスを分離して、viewControllersにmanagedObjectContextへの参照を持たせるための良い方法を理解できません。それを表示する必要があるすべてのビューコントローラーに設定したmanagedObjectContextがありますか?最初の例の作成者が行ったことを実行し、参照を持つMasterViewControllerへの参照を保持して、それを別のViewControllerに渡しますか?このようなものの「ベストプラクティス」が何であるかはわかりません。ありがとう!