2014-01-23 63 views
0

我現在正在構建基於Core Data的iOS應用程序,並且當我試圖在AppDelegate.m內執行[NSEntityDescription insertNewObjectForEintityForName:@"myModel" inManagedObjectContext:_managedObjectContext];來插入新的託管對象時,我得到了標題中描述的錯誤。+ entityForName:在覈心數據中找不到名爲'myModel'的實體 - 缺少什麼?

這是我的AppDelegate.h文件:


#import 

@interface AppDelegate : UIResponder 

@property (strong, nonatomic) UIWindow *window; 

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; 
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; 

- (void)saveContext; 
- (NSURL *)applicationDocumentsDirectory; 

// maybe required? 
//@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController; 

@end 

這是我的AppDelegate.m文件(只顯示相關部分):


#import "AppDelegate.h" 

#import "MyModel.h" 
#import "listViewController.h" 

@implementation AppDelegate 

@synthesize managedObjectContext = _managedObjectContext; 
@synthesize managedObjectModel = _managedObjectModel; 
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    //managed object context settings 
    UITabBarController *tabbarController = (UITabBarController *)self.window.rootViewController; 
    UINavigationController *navigationController = [[tabbarController viewControllers] objectAtIndex:0]; 
    listViewController *listcontroller = [[navigationController viewControllers] objectAtIndex:0]; 

    listcontroller.managedObjectContext = self.managedObjectContext; 

    NSLog(@"%@", _persistentStoreCoordinator.managedObjectModel); 


    MyModel *newMyModel = [NSEntityDescription insertNewObjectForEntityForName:@"MyModel" inManagedObjectContext:_managedObjectContext]; 

    return YES; 
} 

在這個應用程序,我想使用的TabBar控制器作爲根視圖控制器當應用程序啓動時,我希望導航控制器作爲TabBar控制器的根視圖控制器,並使用tableview控制器作爲導航控制器的根視圖控制器。在表格視圖控制器中,我想使用核心數據功能向用戶顯示大量實體。

如果我在NSLog()輸出的確切點使用了斷點,它沒有返回任何錯誤。當我向前移動一行輸出日誌消息時,以下輸出將返回:


() isEditable 0, entities { 
}, fetch request templates { 
} 

這意味着由於某些原因,我沒有實體。

那麼爲什麼在這種情況下沒有實體?因此,從這裏的this answer起,我不會拼錯我的實體名稱。此外,我的objectModelContext沒有設置爲零。我是否設置了錯誤的託管對象?我在didFinishLaunchingWithOptions方法的前三行中做錯了什麼?

或者是否存在導致此問題的原因?或者我錯過了什麼?

我使用iOS 7和Xcode 5,並且我的實體中沒有任何託管對象 - 畢竟,當我嘗試實例化這些託管對象時發生錯誤。

謝謝。

+0

你可以發佈你的代碼來創建你的'ManagedObjectModel'? –

+0

我不遵循你的意思。通過編寫'@property(readonly,strong,nonatomic)NSManagedObjectModel * managedObjectModel來自動創建'ManagedObjectModel'; '在標題和'@synthesize managedObjectModel = _managedObjectModel; '在執行文件中,對嗎? – Blaszard

+1

否 - 這些行只聲明* ManagedObjectModel屬性。您需要代碼來初始化/創建實際模型。默認情況下,Xcode將其放置在AppDelegate中的一個方法中。 –

回答

2

正如上面評論中所討論的,您可能需要檢查您的ManagedObjectModel是如何初始化的。

我個人建議避免將Core Data代碼直接放置在您的應用程序委託中 - 我不認爲Apple的模板能夠很好地實現這一點。檢查出this blog post是建立核心數據堆棧所需的最少代碼量的一個很好的例子,以及每個部件的簡短解釋。

關於您的額外評論問題 - 只要您的managedObjectContext屬性被訪問,您擁有的managedObjectContext方法就會被調用。所以,當你這樣做:

listcontroller.managedObjectContext = self.managedObjectContext; 

此呼籲self,這(如果我沒記錯的話)會初始化上下文managedObjectContext方法。

+0

感謝您的好澄清。 – Blaszard

相關問題