我的解决方案有两点:(1)加beginUpdates
/endUpdates
(2)添加一个布尔变量来检查视图是否已加载或不
更多的解释:如果beginUpdates
触发视图重装周期则视图 - 控制会注意到,数据源已经增加,所以没有insertRowsAtIndexPaths
需要,如果beginUpdates
不触发视图重装周期则neigter numberOfRowsInSection
将被调用,所以insertRowsAtIndexPaths
可以称为
func controller(controller: NSFetchedResultsController!, didChangeObject anObject: AnyObject!, atIndexPath indexPath: NSIndexPath!, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath!) {
if controller == frc {
switch(type) {
case .Insert:
isLayoutReloaded = false
self.tableView.beginUpdates() //<- !!!
if !isLayoutReloaded { //<- !!!
self.tableView.insertRowsAtIndexPaths([newIndexPath], withRowAnimation: .Fade)
}
self.tableView.endUpdates() //<- !!!
}
}
}
override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
isLayoutReloaded = true //<- !!!
let numberOfRowsInSection = ((frc!.sections as NSArray)[0] as NSFetchedResultsSectionInfo).numberOfObjects
return numberOfRowsInSection
}
错误是说,有更新前1行,更新后它应该是2,但它不是2 – bhargavg 2014-09-04 04:40:34