Iphone 多视图中的FetchedResultsController和UITableView

Iphone 多视图中的FetchedResultsController和UITableView,iphone,uitableview,Iphone,Uitableview,小结:我有两个不同的视图,它们使用表来显示从获取的结果控制器得到的结果。这些表可能包含相同的数据。在加载另一个表后移动一个表中的行时,我会出错。(我想很明显!) 为了简化,假设一个实体由国家组成,另一个实体将这些国家组合成一组国家。我们有一个“editSet”视图,允许您命名集合,添加或删除集合中的国家,以及重新排序,所有这些都使用标准UI。然后我们有一个“视图集”视图,显示这些国家以及与之相关的一些值(例如汇率或其他) 现在,在编辑视图中,当我们重新排序并调用MoveRowatineXpath

小结:我有两个不同的视图,它们使用表来显示从获取的结果控制器得到的结果。这些表可能包含相同的数据。在加载另一个表后移动一个表中的行时,我会出错。(我想很明显!)

为了简化,假设一个实体由国家组成,另一个实体将这些国家组合成一组国家。我们有一个“editSet”视图,允许您命名集合,添加或删除集合中的国家,以及重新排序,所有这些都使用标准UI。然后我们有一个“视图集”视图,显示这些国家以及与之相关的一些值(例如汇率或其他)

现在,在编辑视图中,当我们重新排序并调用MoveRowatineXpath时,我设置了一个BOOL,它会停止任何进一步的UI更改,直到更新coredata(每个记录都有一个displayOrder整数,我会在执行另一个performSearch之前更新该整数)。如果您只实例化了“editSet”视图,这一切都可以完美地工作

出现问题的地方是,如果加载“viewSet”,则加载具有相同集合的“editSet”,并移动行。我们在editSet中设置的BOOL不会传递给viewSet(viewSet也在“监视”coredata),当coredata以编程方式更改时,它会感到不安。这将产生:

Serious application error.  An exception was caught from the delegate of
NSFetchedResultsController during a call to -controllerDidChangeContent:
.  *** -[NSMutableArray removeObjectAtIndex:]:
index 0 beyond bounds for empty array with userInfo (null)
所有的地狱都会失去

另一方面,如果我加载/显示的“视图集”与我正在编辑的视图集不同,则没有问题

因此,我需要做的是在离开viewSet时“断开”FRC和表的连接(可能什么都不搜索并重新加载表?),或者在将editSet中coredata中移动的行保存到mimc时将BOOL传递给viewSetController,我在该viewcontroller中本地执行的操作(不太确定如何执行,但我想是可行的)


我确信我不是第一个遇到这个问题的人,所以我想知道,最好的方法是什么?

使用另一个托管对象上下文进行“编辑”,然后在返回“视图集”时将它们合并回。查看Apple示例代码项目“CoreDataBooks”,了解如何使用两个上下文执行不相交的编辑。

我最终进行了一次特意设计的搜索,目的是生成零结果,并更新ViewWillEngase上的表。这解决了这个问题,但性能受到了轻微的影响。我最近意识到另一种选择是使用userDefaults作为一种“全局”来存储正在编辑的集合的ObjectID,并让viewSet控制器检查这一点。我还没有实现这一点,但这是另一个想法。