controllerDidChangeContent索引超出边界

时间:2014-05-22 12:41:15

标签: objective-c uitableview core-data nsfetchedresultscontroller

我知道我的问题有点模糊,但我需要一些线索/想法可能是问题所在。我尝试了一切,但我找不到问题。

我曾使用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)我创建insertNewObjectForEntityName并保存上下文

2)我收到类型为controller:didChangeObject:atIndexPath:forChangeType:newIndexPath

的委托致电NSFetchedResultsChangeInsert

3)我尝试向下滚动到表格的底部,我收到一个错误:

  

CoreData:错误:严重的应用程序错误。抓住了一个例外   在调用期间来自NSFetchedResultsController的委托   -controllerDidChangeContent :. * - [__ NSArrayM objectAtIndex:]:索引7超出边界[0 .. 6] with userInfo(null)

如果用户打开应用并尝试滚动到列表的底部/顶部,有时也会发生同样的崩溃。我打开了sqlite文件,所有记录都在那里。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

谢谢你们的帮助。调试后我意识到存在逻辑错误。在滚动时触发了对托管对象上下文的保存,这导致了错误。我不确定为什么不允许这样做(也许有人可以解释)。我删除了保存,现在一切正常。再次感谢!