2012-10-05 148 views
2

我得到這個錯誤在我的控制檯時,我的iPhone應用程序崩潰:的UITableView CoreData斷言失敗

*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-2372/UITableView.m:1070

它崩潰,給我這個達到這行代碼時:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { 
    [tableView endUpdates]; 
} 

關於我的應用程序的一些細節以及我如何實現這一點。我有一個視圖控制器與表視圖顯示我的核心數據對象。我有這個視圖設置來顯示來自兩個實體的數據,所以表1顯示來自實體的對象,然後第2部分顯示來自我的第二個實體的對象。

這是我的問題開始的地方。雖然這已經相當成功,但我可以推動我的下一個視圖控制器,並將對象添加到我的第一個實體,然後彈回到我的tableviewcontroller,而不會出現問題。但是,如果我嘗試添加一個對象到第二個實體,返回到我的tableviewcontroller它崩潰,如上所述。

我無法解決所有這些問題,所以我不確定從哪裏開始尋找。如果您有任何想法,我很樂意發佈我的代碼以進一步幫助解決這個問題。

謝謝。

從控制檯的一些額外的錯誤信息:

CoreData:錯誤:嚴重應用程序錯誤的一個例外是從NSFetchedResultsController的代理抓了通話過程中-controllerDidChangeContent :.無效更新:行數無效在部分0.更新(2)後現有部分中包含的行數必須等於更新前(2)部分中包含的行數,加上或減去從該部分插入或刪除的行數部分(插入了1個,刪除了0個),並加上或減去移入或移出該部分的行數(0移入,0移出)用戶信息(空)

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    NSInteger rows; 

    id <NSFetchedResultsSectionInfo> sectionInfoAccounts = [[fetchedResultsControllerAccounts sections] objectAtIndex:0]; 
    id <NSFetchedResultsSectionInfo> sectionInfoCosts = [[fetchedResultsControllerCosts sections] objectAtIndex:0]; 

    if (section == 0) rows = [sectionInfoAccounts numberOfObjects]; 
    else if (section == 1) rows = [sectionInfoCosts numberOfObjects]; 

    return rows; 
} 
+0

Xcode應該打印更多關於斷言失敗的內容。編輯您的帖子以包含它打印的所有內容。 –

+0

這就是我從控制檯中得到的所有東西。 –

+0

管理得到更多的錯誤信息。檢查我的問題。 –

回答

2

您正在使用表格視圖2個讀取的結果控制器:一個用於FRC表段0和一個FRC的錶款1.我感到有點猜在這裏,但它可能是誤差在

- (void)controller:(NSFetchedResultsController *)controller 
    didChangeObject:(id)anObject 
     atIndexPath:(NSIndexPath *)indexPath 
    forChangeType:(NSFetchedResultsChangeType)type 
     newIndexPath:(NSIndexPath *)newIndexPath 

如果爲第二個FRC調用該功能,indexPath/newIndexPath的部分部分爲0(因爲FRC只有一個部分)。但對應的表區間是1

因此必須在調用之前映射FRC指數路徑表視圖索引路徑insertRowsAtIndexPaths:...insertRowsAtIndexPaths:...

例如,在插入事件的情況:

NSIndexPath *newIndexPath1 = [NSIndexPath indexPathForRow:newIndexPath.row inSection:1]; 
[self.tableView insertItemsAtIndexPaths:@[newIndexPath1]]; 

否則,第二個實體的新對象作爲第一個表視圖部分的行插入,這會導致不一致異常。

+0

這實際上很有意義,謝謝。我添加了如果(控制器== fetchedResultsControllerCosts)newIndexPath = [NSIndexPath indexPathForRow:newIndexPath.row inSection:1];'提到的方法,它停止我看到的錯誤。但是,如果在配置單元格時達到Cost * cost = [fetchedResultsControllerCosts objectAtIndexPath:indexPath];則此時會導致數組對象出現越界錯誤。 –

+0

原來我只是需要改變那裏的部分,這次是0。由於對象位於FRC的第0部分,而是表格的第1部分。 –