2009-12-04 54 views
0

我有一個CoreData驅動的導航應用程序,我試圖找出它爲什麼會崩潰。這是一個tableView問題或CoreData問題

我有一個層次結構是3視圖控制器深,所有與coredata relatioships有關,就像這樣。

TableViewA = =關係= TableViewB關係= TableViewC

我老老實實在覈心數據是新手,我想我的問題就出在獲取結果控制器。我在TableViewA中有一個,而在TableViewB中有另一個,無論我走多遠,控制檯總是引用TableViewB在崩潰後獲取的結果控制器方法。這是問題嗎?

發生了什麼特別的是,如果我啓動我的應用程序並深入到一條記錄的層次結構中,我們稱之爲Record1,我可以刪除子記錄到我的心中。走了!沒問題!

但第二次我回到TableViewA並深入到不同的記錄,讓我們稱之爲一個Record2,並嘗試刪除它的子記錄我的應用程序崩潰,控制檯從TableViewB引用此代碼作爲問題。

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller { // The fetch controller is about to start sending change notifications, so prepare the table view for updates. [self.tableView beginUpdates]; }

當我進入調試器,具體方法它總是有一個問題是:

if (![x.managedObjectContext save:&error]) { 

    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
}  

只是我的愚蠢與CoreData的確認是所有我找我認爲。 哦,我應該在這種類型的應用程序中擁有多少個ManagedObjectContext。我被告知我應該分開添加內容,然後再重新整合到主內容中。這是真的? 謝謝!

回答

0

我覺得這是一個問題,您刪除了Record1的子記錄,然後在您刪除Record2的子記錄時發生了一些不一致 - 原始的託管對象上下文未保存或發生衝突,或者一些這樣的。我肯定會在你的表視圖代碼之前檢查你的核心數據對象管理。

至於有多個管理對象上下文,通常你只能有一個額外的背景下,當您添加全新的記錄。典型模式是將新記錄添加到輔助上下文中,然後在添加並保存新記錄後,將該上下文合併到應用程序的主要上下文中。對於修改或刪除,只需使用原始上下文。

我可以更明確的瞭解你,如果你發佈NSLog語句的日誌輸出在最後的代碼段有問題。錯誤的domain,codeuserInfo屬性在這裏都會非常有幫助。