NSFetchedResultsController在表更新时无法滚动

时间:2016-03-01 14:43:49

标签: ios swift uitableview

我有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秒在数据库中更新一次,我无法向下滚动,因为控制器刷新项目并将我滚动到顶部。

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