Получить NSManagedObjectContext при использовании раскадровки - PullRequest
10 голосов
/ 18 октября 2011

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

self.navigationController.delegate = self;

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

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

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

Ответы [ 2 ]

12 голосов
/ 06 декабря 2012

@ Роза - Опять?Это крайне нежелательно даже 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;
}
11 голосов
/ 18 октября 2011

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

...