2012-10-13 109 views
5

我正在使用核心數據,並試圖讓它顯示一個簡單的數據模型的數據。該應用程序崩潰,並給了我這個錯誤消息核心數據給出錯誤

終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,原因是:「+ entityForName:無不是合法的NSManagedObjectContext參數搜索實體名稱'提醒」

我不完全確定,但我怎麼看它是說它無法找到我的實體叫Remind?但是,我確實有一個名爲Remind的實體。

我也把斷點,並在這裏停止:enter image description here

任何幫助將不勝感激。完全處於死衚衕。在應用程序委託

託管上下文代碼.M

enter image description here

+0

您的託管對象上下文爲零。我認爲這是一個伊娃...它沒有被設置任何東西。 –

+0

感謝您的回覆。你能告訴我如何解決這個問題嗎? – Zack

+0

不幸的是,或者我會把它放在答案中。您需要添加更多代碼,這裏沒有足夠的信息。在你的視圖控制器中你在哪裏設置managedObjectContext ivar? –

回答

1

這裏的問題是,您的訪問和您的伊娃具有相同的名稱。這就是underbar ivar convention的來源。在這裏,你沒有使用訪問器來訪問你的屬性,你直接使用了支持變量,所以它不會被初始化。相反,確保你總是通過你的訪問器方法,你不會有問題。因此,改寫違規方法(和任何其他人使用managedContextObject屬性的東西,如下列:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; // it's good practice to call the super methods, even if you're fairly certain they do nothing 

    // Get a reference to the managed object context *through* the accessor 
    NSManagedObjectContext* context = [self managedObjectContext]; 

    // From now on, we only use this reference in this method 
    NSFetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription* entity = [NSEntityDescription entityForName:@"Remind" inManagedObjectContext:context]; // <- use the local reference we got through the accessor 
    [request setEntity:entity]; 
    NSError* error = nil; 
    NSArray* array = [context executeFetchRequest:request error:&error]; 
    if(!array) { 
    // Do something with the error 
    NSLog(@"Error Fetching: %@", error); 
    } 
    [self setDesitnationsArray:[array mutableCopy]]; 
    [destinationsTableView reloadData]; 
} 

你可能想改變你的ivars的東西,你會不動心使用,或者將立即顯然你還沒有瀏覽訪問器,比如_managedObjectContext甚至_privateContext,或者任何會在你習慣通過訪問器訪問屬性之前就會遇到的問題,如果你不喜歡訪問屬性的Objective-C語法,可以使用點語法,但是您必須始終記住要經過self,例如self.managedObjectContext。我不喜歡這種方法,因爲人們忘記它不是一個直接的屬性訪問,而是使用訪問器,所以他們認爲可以直接訪問的點語法交換,當它不是時(比如你的情況)。

+0

謝謝你的回答。但是,我確實改變了上面的代碼,像下面這樣,不幸的是它仍然給我提供了同樣的錯誤。 – Zack

+0

@zack,然後從您的應用程序委託中獲取它。你的問題是,你的伊娃是零,這是一個錯誤。您實際上沒有對該方法中的託管對象上下文的引用。 –

+0

@JasonCoco我有同樣的問題。在我的情況下,上下文無效。你可以讓我知道如何從App Delegate獲得它嗎? –