我正在使用一些在UITableView中实现NSFetchedResultsControllerDelegate
的样板代码。当我从表视图中执行segue时,会调用此委托方法:
func controller(controller: NSFetchedResultsController,
didChangeObject anObject: AnyObject,
atIndexPath indexPath: NSIndexPath?,
forChangeType type: NSFetchedResultsChangeType,
newIndexPath: NSIndexPath?) {
guard let newIndexPath = newIndexPath else{
fatalError("No indexPath received") // Gets to this line, thus causing a crash
}
switch(type){
case .Insert:
tableView.insertRowsAtIndexPaths([newIndexPath], withRowAnimation: .Fade)
case .Delete:
tableView.deleteRowsAtIndexPaths([newIndexPath], withRowAnimation: .Fade)
case .Update:
tableView.reloadRowsAtIndexPaths([newIndexPath], withRowAnimation: .Fade)
case .Move:
tableView.deleteRowsAtIndexPaths([newIndexPath], withRowAnimation: .Fade)
tableView.insertRowsAtIndexPaths([newIndexPath], withRowAnimation: .Fade)
}
}
它不断崩溃,因为参数'newIndexPath'传入了一个nil值。当我调用prepareForSegue
时,我可以通过将fetchedResultsController变量(负责调用委托方法的变量)设置为nil来绕过这个。
为什么要在segue上调用此方法?我怎样才能传递正确的newIndexPath
?我应该担心吗?看起来设置负责将此委托方法调用为nil的变量似乎是一种非常优雅的方法来处理这个问题。
答案 0 :(得分:2)
当您的FRC代表收到.Delete
更改时会发生这种情况:
newIndexPath
插入或移动对象的目标路径(对于删除,此值为nil)。
您应该indexPath
与.Delete
,.Update
和tableView.deleteRowsAtIndexPaths
.Move
一起使用newIndexPath
。
在.Insert
部分tableView.insertRowsAtIndexPaths
和.Move
使用fatal: Authentication failed for 'http://sgit.emuasa.es/jros/PruebaGit1.git/'
。