NSFetchedResultsController:当对象从较高索引移动到较低索引时出现异常

Posted

技术标签:

【中文标题】NSFetchedResultsController:当对象从较高索引移动到较低索引时出现异常【英文标题】:NSFetchedResultsController: exception when object moves from higher index to lower index 【发布时间】:2010-07-02 22:52:26 【问题描述】:

我有一个由 NSFetchedResultsController 管理的表格视图。我在 TableViewController 中使用 Apple 提供的样板代码。我的谓词根据对象的名称检索对象。使用“编辑”按钮添加/删除对象时,一切似乎都正常。如果我以编程方式更改对象的名称,事情也可以正常工作除非名称更改导致对象在表中向上移动,在这种情况下我会收到以下错误:

严重的应用程序错误。在调用 -controllerDidChangeContent: 期间,从 NSFetchedResultsController 的委托中捕获了异常。 *** -[NSMutableArray objectAtIndex:]: 索引 1 超出界限 [0 .. 0] with userInfo (null)

假设我有三个名为 A、C 和 D 的对象。如果我将 D 重命名为 B,则应用程序崩溃。如果我将 C 重命名为 B,一切都很好。

这是怎么回事?

【问题讨论】:

【参考方案1】:

使用 NSFetchedResultsController 的 Deusty 的 SafeFetchedResultsController 子类可以帮助处理棘手的行更新和移动操作,这些操作会绊倒 Apple 的类,从而导致这些异常。

【讨论】:

这似乎没有帮助:(但感谢您的建议。我决定在内容更改时简单地重新加载 tableView (无论如何我从来没有超过 7 或 8 行......) SafeFetchedResultsController 确实解决了很多问题,但不幸的是并非全部。更改为使用 reloadData 而不是动画似乎可以解决大多数问题。【参考方案2】:

错误消息指出异常源自您的代码,并且您使用无效索引调用了objectAtIndex:。看起来您正在从数组中删除对象,然后在将其重新插入数组之前尝试检索它。

【讨论】:

以上是关于NSFetchedResultsController:当对象从较高索引移动到较低索引时出现异常的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 应用程序中调用 performFetch 后,是不是需要手动更新表视图?