gpt4 book ai didi

ios - 为什么调用 NSFetchedResultsControllerDelegate 'changeObject'

转载 作者:搜寻专家 更新时间:2023-11-01 07:23:27 25 4
gpt4 key购买 nike

我正在使用一些在 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).

https://developer.apple.com/library/ios/documentation/CoreData/Reference/NSFetchedResultsControllerDelegate_Protocol/#//apple_ref/occ/intfm/NSFetchedResultsControllerDelegate/controller:didChangeObject:atIndexPath:forChangeType:newIndexPath :

您应该将 indexPath.Delete.Update 以及 中的 tableView.deleteRowsAtIndexPaths 一起使用.移动部分。

newIndexPath 用于 .Insert.Move 部分的 tableView.insertRowsAtIndexPaths

关于ios - 为什么调用 NSFetchedResultsControllerDelegate 'changeObject',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37537031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com