2011-10-17 3 views
10

목표는 핵심 데이터로 작업하기 위해 현재 NSManagedObjectContext를 가져 오는 것입니다.Storyboard를 사용할 때 NSManagedObjectContext 가져 오기

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

: (I 문맥을 필요로 어디든지)

self.navigationController.delegate = self; 

나는이 뭔가를 할 수 있습니다 : 아이폰 OS 4.3에서 나는 그래서 같은 (AppDelegate.m 단위) AppDelegate에 일하기 위해 UINavigationController가의 대리자를 설정 이제 iOS 5에서는 스토리 보드를 사용하고 있으며이를 달성하는 방법을 파악하는 데 어려움을 겪고 있습니다. 애초에 AppDelegate.h를 지나치고 싶지 않기 때문에 처음에는 델리게이트를 사용했습니다.

답변

12

@Rose을 - 다시? 그것은 매우 애플도 권장하지 않습니다 :

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

이 주제는 오래되었지만 올바른 답변이므로 올바른 답으로 표시했습니다. – mmvie

+2

뷰 컨트롤러를 관리되는 객체 컨텍스트에 전달하고 applicationDidFinishLaunching 근처에 아무 것도 없으면 어떻게해야할까요? 그것은 단지 내 애플 리케이션에서 어딘가에 5 레벨 깊이 만들어집니다. – user798719

+0

@ user798719 주입하는 것은 나쁜 습관이 아닙니다. iOS 플랫폼에서 사용 가능한 DependencyInjection 프레임 워크를 살펴보십시오. – badeleux

11

이 당신이 필요로하는 경우 나도 몰라,하지만 도움이 될 수
id appDelegate = (id)[[UIApplication sharedApplication] delegate]; self.managedObjectContext = [appDelegate managedObjectContext];

+0

완벽한, 감사합니다! – mmvie

+0

야, 많은 감사 !! – Farini

+0

내가보기 엔 너무 많은 시간을 [managedObjectContext]를 애플 리케이션 위임자의 뷰에 전달하는 방법을 알아 내려고했지만, 더 나은 해결책은 appdelegate에서 moc를 얻는 것이다. 굉장해! – Farini