【发布时间】:2012-09-30 16:56:34
【问题描述】:
我有一个带有 ARC、故事板、支持 ios5+ 的 iPad 应用。
我有一个单独使用 NSFetchedResultsController 的 VC。 VC 有两个指向两个不同实体的表视图。 我在这个 VC 上可以正常添加、更改、删除和移动行。
我现在引入了一项新功能,使用户能够快速将多行添加到这些表格视图中。 我通过提供从这个 VC 到新 VC 的 segue(模态)来做到这一点(我们称之为 quickAddVC)。 用户在 quickAddVC 上输入数据,然后我转回(模态)到原始 VC。 我在(我相信)再次为 VC 设置 NSFetchedResultsControllers 之前(通过备用调用)保存了新记录(我在 ViewDidUnload 中将它们设置为 nil)。
但是,我不断收到此不匹配错误。 不知何故,无论我添加多少记录,它都会将 quickAddVC 发生的插入次数注册为 1 次插入,并且它以某种方式记住在我进行此比较之前 NSFetchedResultsControllers 中有多少记录。
错误:
* -[UITableView _endCellAnimationsWithContext:] 中的断言失败,/SourceCache/UIKit/UIKit-2372/UITableView.m:1070
didChangeObject 失败,名称=NSInternalInconsistencyException 原因=无效更新:第 0 节中的行数无效。更新 (5) 后现有节中包含的行数必须等于该节中包含的行数更新前 (2),加或减从该节插入或删除的行数(1 插入,0 删除)加或减移入或移出该节的行数(0 移入,0 移出) )。
任何关于我做错了什么或应该尝试的想法都会很有用。
我不知道如何让 NSFetchedResultsControllers 简单地忘记其原始状态并从头开始重新启动,我认为这可以为我解决这个问题。
我还没有发布任何代码,我想如果需要我可以发布很多,但希望这里有足够的内容来概述设计问题并获得一些想法。
【问题讨论】:
-
好的解决了这个问题。基本上我在错误的地方清除了 NSFetchedResultsControllers。通过在 segue 之前将它们设置为 nil 一切正常。我做了一个错误的假设,即当我再次返回时调用了 ViewDidLoad 方法,也调用了 ViewDidUnload 方法,但事实并非如此。
标签: ios nsfetchedresultscontroller