Я просматривал примеры Pro Core Data, и мне было интересно, какой хороший способ передать ManagedObjectContext. В примерах в книге я вижу, что автор инициализирует ManagedObjectContext в AppDelegate, затем он делает это в 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, я больше не вижу такого метода инициализации. Я вижу, что в основном используется prepareForSegue, и я вижу в книге "Начало разработки iOS 5" автор сделал бы что-то вроде этого:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
UIViewController *destination = ((UINavigationController *)segue.destinationViewController).topViewController;
if ([destination respondsToSelector:@selector(setDelegate:)]) {
[destination setValue:self forKey:@"delegate"];
}
Я не могу найти хороший способ разделить мои классы и иметь ссылку на manageObjectContext в моих viewControllers. Есть ли у меня manageObjectContext, который я только что установил на всех своих контроллерах представления, которые должны его видеть? Должен ли я делать то, что сделал автор в первом примере, и сохранять ссылку на MasterViewController, у которого есть ссылка, и передавать ее другим моим ViewController? Я не уверен, что такое «лучшие практики» для чего-то подобного. Спасибо!