1

以下步骤会导致 NSFetchedResultsController 崩溃。

  1. 我尝试将第一个元素添加到 NSFetchedResultsController 支持的 TableView。
  2. 我创建了一个临时 MO 对象并显示一个模态视图窗格以添加新对象。
  3. 在添加工作表(模态视图控制器)上,我按下取消按钮以丢弃新元素。
  4. 在取消按钮的 CancelAction 回调中,我删除了我创建的新临时对象。
  5. 此处的代码与 Apple 的 Core Data 示例代码完全相同。我唯一的额外代码是在 Add 工作表被解除后调用 [tableView reloadData] 。
  6. 只有当我尝试添加第一个元素时才会导致崩溃,因为它与 NSFetchedResultsController 中的错误部分计数有关。

这会导致下面给出的崩溃。如果我删除对 reloadData 的冗余调用,则崩溃是不可见的。如果我将 reloadData 调用添加到 Recipe 示例代码数据,崩溃也会发生在那里。

NSFetchedResultsController 是否存在已知问题?

2009-09-13 18:22:45.600 食谱 [14926:20b] * 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)”

4

1 回答 1

4

正如您自己发现的那样,您不应该使用 [tableView reloadData],因为您可能正在使用 NSFetchedResultsController 委托方法

– controllerWillChangeContent:
– controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
– controller:didChangeSection:atIndex:forChangeType:
– controllerDidChangeContent:

当您添加、删除或修改对象时,这些方法实际上负责更新您的表视图。因此,当您添加对 [tableView reloadData] 的调用时,会发生两个不同的线程都在访问/修改您的表视图。这会导致您遇到的崩溃。

如果您没有使用委托方法,那么崩溃是由于代码中的其他原因造成的。

于 2009-09-13T17:49:18.190 回答