我有tableView
NSFetchedResultsController
,可以收听项目更新。
func controllerWillChangeContent(controller: NSFetchedResultsController) {
self.tableView.beginUpdates()
}
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
switch type {
case .Insert:
if let _newIndexPath = newIndexPath {
self.tableView.insertRowsAtIndexPaths([_newIndexPath], withRowAnimation: .None)
}
case .Delete:
if let _indexPath = indexPath {
self.tableView.deleteRowsAtIndexPaths([_indexPath], withRowAnimation: .None)
}
case .Update:
if let _indexPath = indexPath {
self.tableView.reloadRowsAtIndexPaths([_indexPath], withRowAnimation: .None)
}
default:
self.tableView.reloadData()
}
self.items = controller.fetchedObjects as! [Item]
}
func controllerDidChangeContent(controller: NSFetchedResultsController) {
self.tableView.endUpdates()
}
当用户添加项目时,我每1-2秒在数据库中更新一次,我无法向下滚动,因为控制器刷新项目并将我滚动到顶部。
答案 0 :(得分:1)
我发现了问题。这是因为我使用:
self.tableView.rowHeight = UITableViewAutomaticDimension
感谢您的回答:UITableView bouncing back to the top of a section when calling reloadRowsAtIndexPaths
答案 1 :(得分:0)
您是否尝试删除默认案例?每次项目移动时,它都会重新加载表格视图。
尝试实现.Move案例,如本帖所述:http://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use-nsfetchedresultscontroller。