相當新的iPhone開發。我的應用程序使用的核心數據,並在一個點上,我試圖在NSFetchedResultsControllerDelegate方法過程中保存一些數據:核心數據上下文「髒」:MOC保存崩潰應用
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath {
我得到這個最右出蘋果對這個問題的文件。刪除動作看起來就像這樣:
case NSFetchedResultsChangeDelete:
[managedObjectContext deleteObject:anObject];
NSError *error;
if (![managedObjectContext save:&error]) {
NSLog(@"WTF? %@", [error description]);
}
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
現在,當我這樣做,有問題的對象將必然崩潰之後被刪除。所以正確的事情正在發生。雖然這次崩潰很有趣:
嚴重的應用程序錯誤。核心數據更改處理期間發生異常:在保存之前未能處理掛起的更改。 100次嘗試後,上下文仍然很髒。通常,這種遞歸污染是由錯誤的驗證方法-willSave或通知處理程序引起的。與userInfo(null)
2010-02-09 23:02:03.931 app2 [26664:207] ***終止應用程序由於未捕獲的異常'NSInternalInconsistencyException',原因:'未能在保存前處理掛起的更改。 100次嘗試後,上下文仍然很髒。通常,這種遞歸污染是由錯誤的驗證方法--willSave或通知處理程序造成的。
我的研究發現了一些非常有限的結果 - 我在這裏記錄這件事的好東西,呃? :-)但是我的直覺是說MOC正在寫給我的控制器的其他地方,儘管我找不到這種情況的證據。 viewDidLoad方法使用NSFetchedResultsController來獲取初始數據,但就是這樣。
有什麼建議可能是錯誤的地方?像往常一樣,你的基於社區的蜂巢頭腦非常感謝!
歡呼聲,阿隆
感謝你們倆。馬庫斯,你關於委託方法被稱爲MOC保存的結果的說明確實爲我明確了它。我應該去買你的書或其他東西...... :-) – 2010-02-11 02:25:19