簡體   English   中英

帶有nsmanagedobject上下文的核心數據錯誤

[英]error with core data with nsmanagedobject context

由於未捕獲的異常“ NSInternalInconsistencyException”而終止應用程序,原因:“ + entityForName:找不到實體名稱“人”的NSManagedObjectModel” *

該實體在數據模型文件中創建,我將核心數據功能添加到了應用程序委托文件中。

我正在嘗試通過以下方法在選項卡中的第一個視圖控制器中使用核心數據:

- (IBAction)save:(id)sender {

NSLog(@"String is %d", [choiceSeg selectedSegmentIndex]);

NSManagedObjectContext *context = self.managedObjectContext;

Persons *person = (Persons *)[NSEntityDescription insertNewObjectForEntityForName:@"Persons" inManagedObjectContext:context];

NSNumber *ageValue = [NSNumber numberWithInt:[choiceSeg selectedSegmentIndex]];

[person setAge:ageValue];  

// Save the context
if (![context save:nil]) { 
    // error checking
}

另外,我確實在視圖中合成了managedObjectContext。

我做錯了什么?

當您的NSManagedObjectContext實例為nil時,會發生此錯誤。 向視圖控制器提供上下文的推薦方法是通過引用傳遞。 將上下文從您的應用程序委托通過UITabBarController傳遞到第一個視圖控制器非常簡單。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)options
{
    // Assuming you don't already have a property for this (i.e. setup by a storyboard)
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;

    if (!tabBarController.viewControllers.count)
        return;

    FirstViewController *fvc = (FirstViewController *)[tabBarController.viewControllers objectAtIndex:0];

    // Assumes that this view controller has a public writable @property for a context.
    fvc.managedObjectContext = self.managedObjectContext;

    // ... [self.window makeKeyAndVisible]; etc...
}

我意識到這不是最好的方法,因為可以重新排列標簽欄項目,並且我們正在明確尋找第一個項目。 在嘗試在其上設置上下文之前,請先檢查返回的視圖控制器的類。

好的,所以我將AppDelegate.h導入到我的視圖控制器中,並使用其ManagedObjectContext在核心數據中輸入一個項目。

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

有用!

但是我想知道是否每次需要使用核心數據時都必須導入委托並獲取對上下文的本地引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM