ios 8 个具有多个视图的 NSFetchedResultsController
ios 8 NSFetchedResultsController with multiple views
我有这样的东西:
一个。 UICollectionView1 与 FRC1 和 FRC_Search_1 for UICollectionView_Search_Results_1
B. UICollectionView1 with FRC2 and FRC_Search_2 for UICollectionView_Search_Results_2
C. UICollectionView1 with FRC3 and FRC_Search_3 for UICollectionView_Search_Results_3
D. UICollectionView1 with FRC4 and FRC_Search_4 for UICollectionView_Search_Results_4
.
.
.
想法是使用 NSFetchedResultsControllerDelegate 来更新集合视图。但是如果我在 A 和 B 都实现它,在一次更新之后,两个实现都将被调用。我不明白为什么会这样。是因为两个 FRC 都来自同一个实体,还是因为它们具有相同的上下文或其他原因?
解决这个问题的最佳方法是什么?
编辑:
@Tuslareb
我有 2 个带有单独 类 的 UICollectionViewController。每个都有自己的 FRC、collectionView 和 Delegate 实现。如果 FRC 看起来相同(相同的实体、谓词...),当我仅更新一个 collectionViewController 中的一个 collectionView 时,两个委托都会被激活。
如果这 2 个 collectionView 不同,则会出现问题。然后 indexPaths 不同,更新产生错误并停止 app。
这可能是它的工作方式,核心数据是观察 FRC 的类型而不是对象本身。但我想确定一下。
当为 FRC 设置委托时,FRC 将从上下文接收更改通知。然后,FRC 将通知其方法将更新集合(或 table)视图的委托。因此,正如您自己已经发现的那样,当 FRC 对象为 'alive' 时,上下文中的任何更改都会通知 FRC 委托。
这至少回答了你问题的一部分。要解决它,您将需要获取对已更改的集合视图的引用,并以仅对已更改的视图执行的方式更改委托方法。
我有这样的东西:
一个。 UICollectionView1 与 FRC1 和 FRC_Search_1 for UICollectionView_Search_Results_1
B. UICollectionView1 with FRC2 and FRC_Search_2 for UICollectionView_Search_Results_2
C. UICollectionView1 with FRC3 and FRC_Search_3 for UICollectionView_Search_Results_3
D. UICollectionView1 with FRC4 and FRC_Search_4 for UICollectionView_Search_Results_4
.
.
.
想法是使用 NSFetchedResultsControllerDelegate 来更新集合视图。但是如果我在 A 和 B 都实现它,在一次更新之后,两个实现都将被调用。我不明白为什么会这样。是因为两个 FRC 都来自同一个实体,还是因为它们具有相同的上下文或其他原因?
解决这个问题的最佳方法是什么?
编辑:
@Tuslareb
我有 2 个带有单独 类 的 UICollectionViewController。每个都有自己的 FRC、collectionView 和 Delegate 实现。如果 FRC 看起来相同(相同的实体、谓词...),当我仅更新一个 collectionViewController 中的一个 collectionView 时,两个委托都会被激活。
如果这 2 个 collectionView 不同,则会出现问题。然后 indexPaths 不同,更新产生错误并停止 app。
这可能是它的工作方式,核心数据是观察 FRC 的类型而不是对象本身。但我想确定一下。
当为 FRC 设置委托时,FRC 将从上下文接收更改通知。然后,FRC 将通知其方法将更新集合(或 table)视图的委托。因此,正如您自己已经发现的那样,当 FRC 对象为 'alive' 时,上下文中的任何更改都会通知 FRC 委托。
这至少回答了你问题的一部分。要解决它,您将需要获取对已更改的集合视图的引用,并以仅对已更改的视图执行的方式更改委托方法。