我收到NSInternalInconsistencyException异常。它说:'无效更新:第0节中的行数无效。更新后的现有部分中包含的行数(1)必须等于该部分中包含的行数。更新(1),加上或减去从该部分插入或删除的行数(插入1个,删除0个),加上或减去移入或移出该部分的行数(0移入,0移出)。
它说在更新numberOfRowsInSection
之前是1,但在调试期间我看不到。在更新之前,上次调用numberOfRowsInSection
时它返回0.
你有什么想法吗?
这就是我所看到的:
答案 0 :(得分:-1)
我的解决方案有两件事:(1)添加beginUpdates
/ endUpdates
(2)添加一个bool变量来检查视图是否已经加载
更多解释:如果beginUpdates
触发视图重新加载周期,那么viewcontroller将注意到数据源已经增加,因此没有insertRowsAtIndexPaths
需要,如果beginUpdates
没有触发视图重新加载周期则更新numberOfRowsInSection
1}}将被调用,因此可以调用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
}