0

먼저 CoreData를 처음 접했습니다.Handle CoreData가 RootViewController에 없음 (바닐라 coredata-project 마이그레이션)

이제 바닐라 CoreData 프로젝트를 만들었고 모든 코드를 내 프로젝트에 복사하여 CoreData를 구현했습니다. CoreData - 바닐라 프로젝트에서

는 첫 번째의 ViewController (MasterViewController)는 managedObjectContext 처리하는 컨트롤러 :

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

을하지만 CoreData를 처리하기 위해, 내 두 번째의 ViewController를 원하는 :

enter image description here

여기서 볼 수 있듯이, "Bilder"-Viewcontroller가 코어 데이터를 처리/사용하기를 원합니다. 모든 메소드가 해당 컨트롤러에 있으므로 작동해야합니다. 이미로 방법을 변경 시도했다 :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    BilderViewController *controller = [[BilderViewController alloc] init]; 
    controller.managedObjectContext = self.managedObjectContext; 
    return YES; 
} 

그러나보다, 나는 오류가 나타납니다

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'Event''

내 managedObjectContext-방법 :

// Returns the managed object context for the application. 
// If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application. 

- (NSManagedObjectContext *)managedObjectContext 
{ 
    if (_managedObjectContext != nil) { 
     return _managedObjectContext; 
    } 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 
     _managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [_managedObjectContext setPersistentStoreCoordinator:coordinator]; 
    } 
    return _managedObjectContext; 
} 

가 어떻게이 문제를 해결할 수 있습니다 ?

Btw : 궁극적으로 누군가가 왜 프로토 타입 셀이 내 tableview의 맨 위에 있지 않은지 알고 있습니다. 고마워.

+0

나는 당신이 단지 관리 대상 객체 컨텍스트에 대해 아무 것도하지 않고 있다고 생각합니다. 앱 위임자가 핵심 데이터 스택을 초기화합니까? 컨텍스트가 값을 얻는 방법입니다. – bilobatum

+0

질문을 편집하고 managedObjectContext 메소드를 추가했습니다. – Christian

답변

0

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions에서 스토리 보드를 사용하는 동안보기 컨트롤러를 할당 할 필요가 없습니다.

UINavigationController *navController = self.window.rootViewController; 
MasterViewController *viewController = navController.topViewController; 

: 당신이 컨텍스트를 설정하는 뷰 컨트롤러는 스토리 보드에서 인스턴스화이보기 컨트롤러를 얻으려면, 당신이 할 수있는 스토리 보드

에 의해 인스턴스화이 표시되는 실제 아니다 두 번째 뷰 컨트롤러의 속성을 설정하려면

viewController.managedObjectContext = self.managedObjectContext; 

첫 번째 뷰 컨트롤러의 prepareForSegue:에서 그것을하고 두 번째 뷰 컨트롤러와 t이 될 segue.destinationViewController 속성을 가져 : 그럼 당신은으로 컨텍스트를 설정할 수 있습니다 암탉 거기에서 그보기 컨트롤러의 managedObjectContext 속성을 설정할 수 있습니다

0

나는이 문제를 해결했습니다. 나는 단순히로 didFinishLaunchingWithOptions 방법을 변경했습니다 : 나는 단순히 호출하기

보다
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    return YES; 
} 

, 내 AppDelegate에 변수 내가 그것을 필요로 한 누구에서의 ViewController에서 managedObjectContext :

#import "AppDelegate.h" 

.

AppDelegate * appdelegate = [[UIApplication sharedApplication] delegate]; 
NSManagedObjectContext *context = appdelegate.managedObjectContext;