- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用一些在 UITableView 中实现 NSFetchedResultsControllerDelegate
的样板代码。当我执行远离 TableView 的 segue 时,将调用此委托(delegate)方法:
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 变量(负责调用委托(delegate)方法的变量)设置为 nil 来绕过此问题。
为什么这个方法会在 segue 上被调用?我怎样才能传递正确的 newIndexPath
?我应该为此担心吗?将负责调用此委托(delegate)方法的变量设置为 nil 似乎不是解决此问题的一种非常优雅的方式。
最佳答案
当您的 FRC 委托(delegate)收到 .Delete
更改时会发生这种情况:
newIndexPath
The destination path for the object for insertions or moves (this value is nil for a deletion).
您应该将 indexPath
与 .Delete
、.Update
以及 中的
部分。tableView.deleteRowsAtIndexPaths
一起使用.移动
将 newIndexPath
用于 .Insert
和 .Move
部分的 tableView.insertRowsAtIndexPaths
。
关于ios - 为什么调用 NSFetchedResultsControllerDelegate 'changeObject',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37537031/
我正在使用一些在 UITableView 中实现 NSFetchedResultsControllerDelegate 的样板代码。当我执行远离 TableView 的 segue 时,将调用此委托(
我要开始另一个项目,我正在创建函数来添加、更新和删除对象。 在命名更新和删除函数时,我倾向于怀疑自己,因为有时我将它们命名为: updateObject and removeObject 但是当我对不
我是一名优秀的程序员,十分优秀!