collectionView 中每个单元格的 NSFetchedResultsController
NSFetchedResultsController per cell in a collectionView
我有一个带有 NSFetchedResultsController
的 collectionView。 collectionView
中的某些单元格将有额外嵌入的 UI 元素从核心数据查询,这些额外嵌入的 UI 元素也需要 NSFetchedResultsController
的更新功能。
所以我的问题是,推荐的解决方法是什么?
由于单元格的数量,以及每个单元格是否嵌入了UI元素,取决于实际从服务器获取的数据,我们不能使用NSFRC的sectionKeyPath
吧?
编辑:额外的 UI 元素与嵌入单元格的模型不同,因此需要单独查询 (NSPredicate
)。
编辑:我们的核心数据模型:
RelationModel
type
status
Relationships(fromProfile, toProfile)
ProfileModel
..many fields
Relationships(photos)
基本上,额外的 UI 元素将是 toProfiles,嵌入单元格是 fromProfile。但是因为应用程序中有不止一种关系,我们决定有一个单独的关系模型。而且我发现很难设置从 ProfileModel 到 RelationModel
的关系
NSFetchedResultsController
是一个非常酷的对象。它执行一次获取,然后监视核心数据的变化。虽然它有一个依赖于 indexPaths 的接口,因此很自然地会将这些 indexPath 视为与您的 collectionView 相同的 indexPaths,但并不要求您这样做。 fetchedResultsController 的 indexPaths 可以不同于 collectionView 的 indexPaths - 你只需要注意跟踪你正在处理的 indexPaths 并从一个转换到另一个。
例如:您有一组从核心数据中获取的小部件。一些小部件有一个 属性 的 extraWidgetInfo,您希望将其显示在 UI 作为一个额外的单元格。 fetchedResultsController 表示有 4 个元素(全部在第 0 节中)。但是 collectionView 可以将其显示为
[section1] 小部件 1,
[section2] widget2,widget 2 额外信息,
[section3] widget3,
[section4] widget4,widget 4 额外信息。
虽然fetchedResultsController只说有4个元素,但collectionView中有6个cell。在处理更新时,您还必须翻译 fetchedResultsController indexPath。更新将转换为重新加载部分,添加将转换为插入部分并在该部分中插入一定数量的行。您也可以在核心数据更新时调用 reloadData(如果您的数据很少更新,这可能是一个不错的选择)。
由于我们需要在每个单元格中进行单独的查询,因此我们最终在每个单元格出队时设置了单独的 NSFetchedResultsController
。然后在 prepareForReuse
时将 NSFetchedResultsController
设置为 nil。
我有一个带有 NSFetchedResultsController
的 collectionView。 collectionView
中的某些单元格将有额外嵌入的 UI 元素从核心数据查询,这些额外嵌入的 UI 元素也需要 NSFetchedResultsController
的更新功能。
所以我的问题是,推荐的解决方法是什么?
由于单元格的数量,以及每个单元格是否嵌入了UI元素,取决于实际从服务器获取的数据,我们不能使用NSFRC的sectionKeyPath
吧?
编辑:额外的 UI 元素与嵌入单元格的模型不同,因此需要单独查询 (NSPredicate
)。
编辑:我们的核心数据模型:
RelationModel
type
status
Relationships(fromProfile, toProfile)
ProfileModel
..many fields
Relationships(photos)
基本上,额外的 UI 元素将是 toProfiles,嵌入单元格是 fromProfile。但是因为应用程序中有不止一种关系,我们决定有一个单独的关系模型。而且我发现很难设置从 ProfileModel 到 RelationModel
的关系NSFetchedResultsController
是一个非常酷的对象。它执行一次获取,然后监视核心数据的变化。虽然它有一个依赖于 indexPaths 的接口,因此很自然地会将这些 indexPath 视为与您的 collectionView 相同的 indexPaths,但并不要求您这样做。 fetchedResultsController 的 indexPaths 可以不同于 collectionView 的 indexPaths - 你只需要注意跟踪你正在处理的 indexPaths 并从一个转换到另一个。
例如:您有一组从核心数据中获取的小部件。一些小部件有一个 属性 的 extraWidgetInfo,您希望将其显示在 UI 作为一个额外的单元格。 fetchedResultsController 表示有 4 个元素(全部在第 0 节中)。但是 collectionView 可以将其显示为
[section1] 小部件 1,
[section2] widget2,widget 2 额外信息,
[section3] widget3,
[section4] widget4,widget 4 额外信息。
虽然fetchedResultsController只说有4个元素,但collectionView中有6个cell。在处理更新时,您还必须翻译 fetchedResultsController indexPath。更新将转换为重新加载部分,添加将转换为插入部分并在该部分中插入一定数量的行。您也可以在核心数据更新时调用 reloadData(如果您的数据很少更新,这可能是一个不错的选择)。
由于我们需要在每个单元格中进行单独的查询,因此我们最终在每个单元格出队时设置了单独的 NSFetchedResultsController
。然后在 prepareForReuse
时将 NSFetchedResultsController
设置为 nil。