Передача ссылки NSManagedObjectContext при использовании StoryBoard

Я просматривал примеры 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? Я не уверен, что такое «лучшие практики» для чего-то подобного. Спасибо!


person Crystal    schedule 19.06.2012    source источник


Ответы (1)


prepareForSegue:sender: действительно является предпочтительным способом передачи данных от одного контроллера представления к другому при использовании раскадровки. Пример кода prepareForSegue, который вы разместили, именно так, как вы это сделаете. У меня есть именно этот код в одном из моих приложений:

- (void) prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender
{
    if( [[segue identifier] isEqualToString:@"showLog"] ) {
        UIViewController* logView = segue.destinationViewController;
        if( [logView respondsToSelector:@selector(setManagedObjectContext:)] ) {
            [logView setValue:self.managedObjectContext forKey:@"managedObjectContext"];
        }
    }
}

Если вы еще не т видел это.

person zpasternack    schedule 19.06.2012