2011-10-17 18 views
10

Celem jest uzyskanie bieżącego obiektu NSManagedObjectContext w celu pracy z danymi podstawowymi. W iOS 4.3 ustawić delegować UINavigationController, aby być AppDelegate jak tak (w AppDelegate.m):Uzyskaj NSManagedObjectContext podczas korzystania ze scenorysu

self.navigationController.delegate = self; 

i mógłby zrobić coś takiego (gdziekolwiek Potrzebowałem kontekstu):

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

Teraz w iOS 5 używam Storyboard i mam trudny czas, zastanawiając się, jak to osiągnąć. Najpierw skorzystałem z delegata, ponieważ nie sądzę, że chcesz cały czas przekazywać swoją aplikację AppDelegate.h.

Odpowiedz

12

@Rose - Znowu? Jest bardzo zniechęca nawet przez Apple:

od Apple Doc:

Kontroler widoku zazwyczaj nie powinien pobierać od kontekstu globalnego obiektu, takich jak stosowanie delegata-to sprawia, że ​​architektura aplikacji sztywne. Ani kontroler widoku nie powinien tworzyć kontekstu dla własnego użytku (chyba że jest to zagnieżdżony kontekst). Może to oznaczać, że operacje wykonywane przy użyciu kontekstu kontrolera nie są rejestrowane w innych kontekstach, więc różne kontrolery widoku będą miały różne perspektywy danych.

Zalecany sposób:

- (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; 
} 
+0

Chociaż ten temat jest stary, masz rację, a zatem oznaczyłem go jako poprawną odpowiedź. – mmvie

+2

co, jeśli chcesz przekazać kontrolerowi widoku kontekst obiektu zarządzanego i nie ma go w pobliżu applicationDidFinishLaunching? Został utworzony tylko 5 poziomów w innym miejscu mojej aplikacji. – user798719

+0

@ user798719 Nie jest źle ćwiczyć wstrzykiwać. Zapoznaj się z frameworkami DependencyInjection dostępnymi na platformie iOS – badeleux

11

Nie wiem, czy to jest to, czego potrzebujesz, ale może to pomoże:
id appDelegate = (id)[[UIApplication sharedApplication] delegate]; self.managedObjectContext = [appDelegate managedObjectContext];

+0

Perfect, dzięki! – mmvie

+0

Stary, wielkie dzięki! – Farini

+0

Chyba spędziłem zbyt dużo czasu próbując dowiedzieć się, jak przekazać [managedObjectContext] z delegata aplikacji do widoku, oczywiście lepszym rozwiązaniem jest po prostu uzyskać moc z appdelegate. Niesamowite! – Farini

Powiązane problemy