我有一个UIView
,其中包含UITableView
以及不同的组件。其对应的UIViewController
的{{1}}如下:
viewDidLoad()
这种安排很好:当我在表格中添加/删除条目时,表格会重新加载。
但我不认为这是正确的做法,因为每当发生任何变化时整个表都会重新加载。看起来有点矫枉过正。
在网上看了好几个小时之后,我什么都没有。任何人都可以指出我这样做的正确方法吗?或者我做得对吗?
答案 0 :(得分:1)
虽然没有什么"错误"如你所述,每次有一个对象改变时,都不需要reloadData()
来调用它。您可以通过实施其他NSFetchedResultsControllerDelegate
功能并使用beginUpdates()
和endUpdates()
来更新您想要的内容,如下所示:
func controllerWillChangeContent(controller: NSFetchedResultsController) {
tableView.beginUpdates()
}
func controllerDidChangeContent(controller: NSFetchedResultsController) {
tableView.endUpdates()
}
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
switch type {
case NSFetchedResultsChangeType.Insert:
tableView.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Fade)
case NSFetchedResultsChangeType.Delete:
tableView.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Fade)
case NSFetchedResultsChangeType.Move:
break
case NSFetchedResultsChangeType.Update:
tableView.reloadRowsAtIndexPaths([indexPath!], withRowAnimation: .Fade)
}
}