我的应用程序使用附加到NSFetchedResultsController
的{{1}}。
我遇到了一个非常奇怪的问题,因为当一个插入物进入数据库时,一个新项目应该出现在表格的底部,最后一个项目的单元格被替换为新插入的项目 - 所以屏幕现在显示我刚刚插入的项目,但是之前的那个项目已经丢失了。进一步的插入表现出相同的行为,表格不会增长,最后一个项目将替换为任何新项目。
当应用程序重新启动时,数据的完整表格应该显示(换句话说,被覆盖的单元格仍然在数据库中有数据)。似乎取出的结果控制器会丢失新项目应该去的位置。
之前和之后的一个例子:
此外:
UITableView
controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
答案 0 :(得分:0)
这种现象似乎表明,在违规更新代码中,您正在更新最后一个单元格,而不是插入一个单元格。
使用
insertRowsAtIndexPaths:withRowAnimation:
而不是
reloadRowsAtIndexPaths:withRowAnimation:
答案 1 :(得分:0)
我猜您在方法中使用了错误的参数:
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath
插入行时,请小心使用newIndexPath
参数,而不是indexPath
:
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
switch (type) {
case NSFetchedResultsChangeInsert:
[self.tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
default:
break;
}
}