ios - collectionView 中每个单元格的 NSFetchedResultsController

标签 ios swift core-data nsfetchedresultscontroller

我有一个带有 NSFetchedResultsController 的 collectionView。 collectionView 中的一些 cell 会从核心数据中查询到额外的嵌入式 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 的接口(interface),因此很自然地会将这些 indexPath 视为与您的 collectionView 相同的 indexPaths,但并不要求您这样做。 fetchedResultsController 的 indexPaths 可以不同于 collectionView 的 indexPaths - 您只需要注意跟踪您正在处理的 indexPaths 并从一个转换为另一个。

例如:您有一组从核心数据中获取的小部件。一些小部件具有 extraWidgetInfo 属性,您希望在 UI 中将其显示为额外的单元格。 fetchedResultsController 表示有 4 个元素(全部在第 0 节中)。但是 collectionView 可以将其显示为

[第 1 节] 小部件 1,

[section2] widget2,widget 2 额外信息,

[section3] widget3,

[section4] widget4,widget 4 额外信息。

虽然 fetchedResultsController 只说有 4 个元素,但 collectionView 中有 6 个单元格。在处理更新时,您还必须翻译 fetchedResultsController indexPath。更新将转换为重新加载部分,添加将转换为插入部分并在该部分中插入一定数量的行。您也可以在核心数据更新时调用 reloadData(如果您的数据很少更新,这可能是个不错的选择)。

关于ios - collectionView 中每个单元格的 NSFetchedResultsController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49785480/

相关文章:

ios - 在核心数据中获取具有关系的数据

ios - 升级到 Xcode8 后 React Native RCCTCustomScrollView 损坏

ios - IB 的 UIScrollView 不滚动

ios - 检查缓存的 HTTP 响应的有效性

ios - 如何快速触发按钮选择而不是单元格选择

ios - 使用 CoreData 保存 EVObject

ios - 将对象表 IndexPath 设置为对象属性?

iOS:UIImage 上的 EXC_BAD_ACCESS:drawInRect 有 2 个图像

ios - 您的凭据不允许访问此资源 Twitter API 错误

ios - 使用属于实体的 NSSet 中的对象对 NSFetchedResultsController 进行排序