0

我知道我的問題有點模糊,但我需要一些線索/想法可能是問題。我嘗試了一切,但找不到問題。controllerDidChangeContent index超越界限

我已經使用NSFetchedResultsControllerUITableView幾次,並從未遇到過這種問題。我有一個表格視圖,我使用NSFetchedResultsController將它與核心數據連接起來。我創建NSFetchedResultsController這樣的:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:_database.managedObjectContext]; 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setSortDescriptors:@[]]; 
[fetchRequest setEntity:entity]; 

NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] 
              initWithFetchRequest:fetchRequest 
              managedObjectContext:_database.managedObjectContext 
              sectionNameKeyPath:nil 
              cacheName:nil]; 

在當有更多的記錄比表視圖可以在一個屏幕上顯示與用戶試圖滾動到表視圖的底部有一個點,崩潰發生。

場景:

1)I創建insertNewObjectForEntityName和保存歷境

2)I接收委託調用controller:didChangeObject:atIndexPath:forChangeType:newIndexPath類型NSFetchedResultsChangeInsert

3)我嘗試向下滾動到表的底部,我收到一個錯誤:

CoreData: error: Serious application error. An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. * -[__NSArrayM objectAtIndex:]: index 7 beyond bounds [0 .. 6] with userInfo (null)

如果用戶打開一個應用程序並嘗試滾動到列表的底部/頂部。我打開了sqlite文件,所有記錄都在那裏。任何幫助,將不勝感激。

+0

您是否嘗試捕獲代表中的異常? –

+0

您是否使用單個ManagedObjectContext?是_database.managedObjectContext與用戶滾動時添加額外數據時使用的上下文相同嗎? – NavinDev

+0

是的,異常發生在[self.tableView endUpdates]上,原因是「 - [__ NSArrayM objectAtIndex:]:index 7 beyond bounds [0 .. 6]」。我不確定7是什麼,因爲我在列表中有更多的項目。 – sash

回答

0

謝謝你們的幫助。調試後,我意識到有一個邏輯錯誤。管理對象上下文的保存在滾動時觸發,導致錯誤。我不知道爲什麼這是不允許的(也許有人可以解釋)。我刪除了儲蓄,現在一切正常。再次感謝!

+0

FRC在添加任何新對象時監視上下文,只要保存被調用,它就會假定新對象已添加並進入並獲取上下文中的所有對象並嘗試更新表。 – NavinDev