NSFetchedResultsController与已更改记录的数量冲突

时间:2012-09-30 16:56:35

标签: ios nsfetchedresultscontroller

我有一个带有ARC的iPad应用程序,故事板,支持ios5 +。

我有一个独立使用NSFetchedResultsController的VC。 VC有两个表格视图指向两个不同的实体。 我在这个VC上有单个记录添加,更改,删除和移动行正常工作。

我现在介绍了一项新功能,使用户可以快速向这些tableview添加多行。 我这样做是通过从这个VC提供一个segue(模态)到一个新的VC(让我们称之为quickAddVC)。 用户在quickAddVC上输入数据,然后我将(模态)转换回原始VC。 我在(我相信)再次为VC设置NSFetchedResultsControllers之前保存了新记录(通过备用调用)(我在ViewDidUnload中将它们设置为nil)。

但是我一直遇到这种不匹配错误。 不知何故,无论我添加了多少记录,它都会将quickAddVC中插入的插入数量保持为1插入,并且它会以某种方式记住在我的segues进行此比较之前NSFetchedResultsControllers中有多少记录。

错误:

  

* 断言失败 - [UITableView _endCellAnimationsWithContext:],/ SourceCache / UIKit / UIKit-2372 / UITableView.m:1070

     

didChangeObject失败,name = NSInternalInconsistencyException reason =无效更新:第0节中的行数无效。更新(5)后现有部分中包含的行数必须等于该部分中包含的行数在更新(2)之前,加上或减去从该部分插入或删除的行数(插入1个,删除0个),加上或减去移入或移出该部分的行数(0移入,0移出)。

关于我做错了或应该尝试的任何想法都会有用。

我无法弄清楚如何让NSFetchedResultsControllers简单地忘记它的原始状态并从头开始重启,我认为我会为此解决这个问题。

我没有发布任何代码,我想如果需要我可以发布很多但希望有足够的概述设计问题并获得一些想法。

1 个答案:

答案 0 :(得分:1)

只需将答案标记为已关闭。

好的解决了这个问题。基本上我是在错误的地方清理NSFetchedResultsControllers。通过在segue之前将它们设置为nil,一切正常。我做了一个不正确的假设,当我再次调用时调用了ViewDidLoad方法时,也调用了ViewDidUnload方法,但事实并非如此。