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:当对象从较高索引移动到较低索引时出现异常的主要内容,如果未能解决你的问题,请参考以下文章