Получить NSManagedObjectContext при использовании раскадровки

Цель состоит в том, чтобы получить текущий NSManagedObjectContext для работы с Core Data. В iOS 4.3 я установил делегат UINavigationController как AppDelegate так (в AppDelegate.m):

self.navigationController.delegate = self;

и я мог бы сделать что-то вроде этого (везде, где мне нужен контекст):

NSManagedObjectContext *context = [self.navigationController.delegate performSelector:@selector(managedObjectContext)];

Теперь, в iOS 5, я использую раскадровку, и мне сложно разобраться, как это сделать. В первую очередь я использовал делегата, потому что я не думаю, что вы хотите постоянно проходить через AppDelegate.h.

Ответ 1

@Rose - Опять? Apple даже не приветствует:

Из Apple Doc:

Контроллер представления обычно не должен извлекать контекст из глобального объекта, такого как делегат приложения, что делает архитектуру приложения жесткой. Контроллер представления также не должен создавать контекст для собственного использования (если только его вложенный контекст). Это может означать, что операции, выполненные с использованием контекста контекста контроллеров, зарегистрированного в других контекстах, поэтому разные диспетчеры представлений будут иметь разные перспективы для данных.

Рекомендуемый способ:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
{
// Override point for customization after application launch.
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
MasterViewController *controller = (MasterViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
return YES;
}

Ответ 2

Я не знаю, нужно ли это, но это может помочь:
id appDelegate = (id)[[UIApplication sharedApplication] delegate]; self.managedObjectContext = [appDelegate managedObjectContext];