ios - 为 UITableViewController 执行与核心数据联合的等效操作

标签 ios core-data uitableview nsfetchedresultscontroller

我知道 union 是一个 SQL 结构,但它是我正在尝试做的事情的最佳类比。

我从外部源接收到多组数据。我将它们作为 Core Data 中的独立实体进行维护(它们只有一些共同的属性(例如名称)),但我想将它们呈现在同一个 tableView 中。

假设我有一个与 FruitGroup 和 VegetableGroup 有关系的实体 Food。 FruitGroup 与 Fruit 有关系,Fruit 与 FruitType 有关系。 VegetableGroup 类似。

如何使用 FruitGroup.Fruit.name VegetableGroup.Vegetable.name 作为 sectionTitles? FruitGroup.Fruit.FruitType.name VegetableGroup.Vegetable.VegetableType.name 用于行数据。 (我尝试想出一个从 Food 走下来的谓词,但这似乎行不通)

示例建模数据(我的组比水果和蔬菜更不同,所以重新做我的数据模型不是一种选择):

Food
  FruitGroup
     Apple
         Macintosh
         Granny Smith
     Pear
         Bartlett
         Asian
         Anjou
  VegetableGroup
     Asparagus
         white
         wild
     Peas
         baby
         split

我想显示为:

Apple [section]
   Macintosh   [row]
   Granny Smith
Pear
   Bartlett
   Asian
   Anjou
Asparagus
   white
   wild
Peas
   baby
   split

我可以在 UITableViewController 中使用多个 NSFetchedResultsControllers 并在每个 UITableViewDataSource 方法中有条件地选择 FRC,但这感觉并不好干净。

我正在考虑对 NSFetchedResultsController 进行子类化,并在我的子类内部合并多个私有(private) NSFetchedResultsControllers 的结果,每个都代表一个实体。 (例如,sections 返回内部 FRC 的 sections 调用返回的串联)

这是否有意义 - 还是有更好的方法? (我看到了Core Data Union Query Equivalent,但由于我的实体之间存在关系,所以我想寻求替代方案)

最佳答案

虽然您可以按照其他答案中的描述执行此操作(通过创建抽象父实体),但我不推荐这样做。与抽象 parent 打交道时的表现很快就会变差。这样做的原因是 Core Data 会将所有子项放入底层 SQLite 文件中的单个表中。

我建议走另一条路。有一个名为 Food 的实体,其属性描述它是蔬菜还是水果。然后你有一个 NSFetchedResultsController ,它有食物的 type 作为 sectionPath ,你将按照你想要的方式显示。

我建议在 Core Data 中根据对象的内容创建非常松散的实体。我不会为 Honda、Ford 和 Dodge 创建实体,但会为 Car 创建一个实体,可能还需要类型或与制造商的关系。

虽然核心数据可以由数据库支持,但归根结底,它不是数据库,而是对象图,应该这样对待。尝试规范化数据库将导致对象图性能不佳。

关于ios - 为 UITableViewController 执行与核心数据联合的等效操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21177593/

相关文章:

iphone - 访问 iPhone 通讯录中的人员信息

ios - Core Data 中如何有效处理大数据集?

ios - 快速动态的 UITableView 行高

ios - ios 如何退出谷歌账户?

ios - 从它自己的 UView 子类中添加 UIView 作为 SuperView subview

ios - 放置 UIViewController 设置代码的最佳位置在哪里?

iphone - 在 iPhone/iPod Touch 上本地存储包含 333,000 行的 sqlite 数据库是否可行?

iphone - 从设备中删除应用程序后无法使用 nil 模型创建 NSPersistentStoreCoordinator

swift - 带有 Xib 错误的 UItableView 部分标题 View - Swift

ios - 添加阅读更多标签和扩展 UITableViewCell