为什么调用 NSFetchedResultsControllerDelegate 'changeObject'
Why is NSFetchedResultsControllerDelegate 'changeObject' being called
我正在使用一些在 UITableView 中实现 NSFetchedResultsControllerDelegate
的样板代码。当我从 table 视图执行 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 似乎不是解决此问题的一种非常优雅的方式。
当您的 FRC 代表收到 .Delete
更改时发生:
newIndexPath
The destination path for the object for insertions or moves (this value is nil for a deletion).
您应该在 .Move
部分将 indexPath
与 .Delete
、.Update
和 tableView.deleteRowsAtIndexPaths
一起使用。
对 .Insert
使用 newIndexPath
,在 .Move
部分使用 tableView.insertRowsAtIndexPaths
。
我正在使用一些在 UITableView 中实现 NSFetchedResultsControllerDelegate
的样板代码。当我从 table 视图执行 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
.
为什么这个方法会在 segue 上被调用?我怎样才能传递正确的newIndexPath
?我应该为此担心吗?将负责调用此委托方法的变量设置为 nil 似乎不是解决此问题的一种非常优雅的方式。
当您的 FRC 代表收到 .Delete
更改时发生:
newIndexPath
The destination path for the object for insertions or moves (this value is nil for a deletion).
您应该在 .Move
部分将 indexPath
与 .Delete
、.Update
和 tableView.deleteRowsAtIndexPaths
一起使用。
对 .Insert
使用 newIndexPath
,在 .Move
部分使用 tableView.insertRowsAtIndexPaths
。