0

首先,我是CoreData的新手。處理CoreData不在RootViewController中(遷移vanilla coredata-project)

現在我創建了一個vanilla CoreData-project,並將所有代碼複製到我想要實現CoreData的項目中。

在CoreData香草項目,第一視圖 - 控制(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:

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; 
} 

我怎樣才能解決這個問題?

順便說一句:最終,有人也知道,爲什麼原型單元不在我的tableview的頂部。謝謝。

+0

我懷疑你只是通過零管理的對象上下文。您的應用程序委託是否初始化Core Data堆棧?這就是上下文獲得價值的方式。 – bilobatum

+0

我編輯了我的問題並添加了managedObjectContext方法 – Christian

回答

0

在您的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions使用故事板時,您不需要alloc-init視圖控制器。您正在設置上下文的視圖控制器是不顯示,因爲這與實際是由故事板

實例化要獲得從故事板實例化這個視圖控制器,你可以這樣做:

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

然後,你可以設置上下文:

viewController.managedObjectContext = self.managedObjectContext; 

設置第二個視圖控制器上的屬性,做到在第一視圖控制器的prepareForSegue:,並獲得segue.destinationViewController屬性將是你的第二個視圖控制器和T如果你可以從那裏設置該視圖控制器的managedObjectContext屬性

0

我已經解決了這個問題。我只是改變了didFinishLaunchingWithOptions方法:

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

比,我只是叫我的AppDelegate變量managedObjectContext在ViewController中,在其中我需要它:

#import "AppDelegate.h" 

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