2011-10-17 28 views
10

Amaç, Çekirdek Veriler ile çalışmak için geçerli NSManagedObjectContext dosyasını elde etmektir.Storyboard'u kullanırken NSManagedObjectContext'i edinin

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

: (ı bağlamını gerektiği yerde)

self.navigationController.delegate = self; 

ve böyle bir şey yapabileceğini: iOS 4.3 ben şöyle (AppDelegate.m olarak) AppDelegate olmak UINavigationController en temsilci ayarlamak Şimdi, iOS 5'de bir Storyboard kullanıyorum ve bunu nasıl başaracağımı anlamakta zorlanıyorum. İlk olarak bir delege kullandım çünkü her zaman AppDelegate.h uygulamanızı geçtiğini sanmıyorum.

cevap

12

@Rose - Yine mi? Bu son derece Apple tarafından da tavsiye edilmez:

elma Doc kaynaktan:

bir görünümü denetleyicisi tipik olarak bir uygulama olarak küresel bir nesneden içeriği almak gerekir temsilci-Bu uygulama mimarisi rijid bir hale getirir. Görünüm denetleyicisinin kendi kullanımı için bir bağlam oluşturması gerekmez (iç içe geçmiş bir içerik olmadığı sürece). Bu, denetleyicinin bağlamını kullanarak gerçekleştirilen işlemlerin başka bağlamlarda kayıtlı olmadığı anlamına gelebilir, bu nedenle farklı görüntü denetleyicileri, veriler üzerinde farklı bakış açılarına sahip olacaktır.

Önerilen yol:

- (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

Bu konu eski olmasına rağmen, siz haklısınız ve bu yüzden doğru yanıt olarak işaretledim. – mmvie

+2

Bir görünüm denetleyicisini yönetilen nesne bağlamını geçmek ve bunun applicationDidFinishLaunching'in yakınında olmadığını görmek ne olabilir? Uygulamamda yalnızca başka bir yerdeki 5 seviye oluşturuldu. – user798719

+0

@ user798719 Bunu enjekte etmek kötü bir uygulama değildir. Lütfen iOS platformunda bulunan DependencyInjection çerçevelerine bakın. – badeleux

11

bu gerekenler ise bilmiyorum ama yardımcı olabilir:
id appDelegate = (id)[[UIApplication sharedApplication] delegate]; self.managedObjectContext = [appDelegate managedObjectContext];

+0

Mükemmel, teşekkürler! – mmvie

+0

Dostum, çok teşekkürler! – Farini

+0

Görünüşe göre [manageObjectContext] 'inin uygulama temsilcisinden görünüme nasıl geçeceğini anlamaya çalışmak için çok fazla zaman harcadım, tabi ki daha iyi bir çözüm sadece appdelegate'den moc almaktır. Korku veren! – Farini