gpt4 book ai didi

ios - 调用 objectAtIndexPath : 时 NSFetchedResultsController "cannot access fetched objects before -performFetch:"崩溃

转载 作者:行者123 更新时间:2023-11-29 11:48:47 32 4
gpt4 key购买 nike

在我的崩溃日志中,我发现了一个有趣的崩溃,但我不明白为什么会发生。我也无法复制它。

在我的 tableView:didSelectRowAtIndexPath: 方法实现中的以下行中,当用户点击一个单元格时,它崩溃了:

fetchedResultsController?.objectAtIndexPath(indexPath) as! SearchResultEntity

崩溃:

Fatal Exception: NSInvalidArgumentException
cannot access fetched objects before -performFetch:

问题是 performFetch: 在 View Controller 的 viewDidLoad 方法中被调用。因此,不可能在调用 tableView:didSelectRowAtIndexPath: 委托(delegate)方法之前调用 performFetch:。或者是?

我正在使用 NSFetchedResultController 的非常常见的设置,它显示来自数据库的结果。随着旧记录的删除和新的插入,数据库中的记录经常更改。

我想到的一件事是,当相关对象从 CoreData 中删除并且 TableView 正在动画删除更改时,用户可以点击单元格。这可能吗?

如果是这个原因,有什么办法可以避免吗?

最佳答案

是的,您可能会访问来自 fetchedResultsController 的删除对象,但这种情况非常罕见,而且这里没有发生这种情况。一般来说,NSFetchedResultController 的 工作是与核心数据同步。但是可能有一个非常的小时间点,就在更新开始但在 fetchedResultsController 有机会更新之前访问 fetchedObject 可能导致崩溃。但这不会导致未调用 performFetch 的崩溃。

  • 查看因错误而失败的 performFetch 日志(如果没有则创建日志)。如果用户的磁盘空间非常低,就会发生这种情况。
  • 检查 fetchedResultsController 是否被另一个未调用 perform fetched 的 fetchedResultsController 替换。
  • 检查您的 viewDidLoad 中是否有任何可能导致不调用 performFetch 的 if 语句。即使期望这些陈述始终为真,也可能存在并非如此的情况。
  • 如果您在任何时候在您的 viewController 中设置 self.view = nil,这可能会导致再次调用 viewDidLoad,这可能会导致您的应用出现意外行为。

关于ios - 调用 objectAtIndexPath : 时 NSFetchedResultsController "cannot access fetched objects before -performFetch:"崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42162028/

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