繁体   English   中英

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

[英]Performing the equivalent of a union with Core Data for a UITableViewController

我知道联合是一个SQL构造,但这是我要尝试的最佳模拟。

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

假设我有一个实体Food,它与FruitGroup和VegetableGroup有关系。 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进行子类化,并在我的子类内部,合并每个代表一个实体的多个私有NSFetchedResultsControllers的结果。 (例如,各部分返回内部FRC的各部分调用的收益的串联)

这有意义吗?还是有更好的方法? (我看到了等效的核心数据联合查询,但是由于我的实体之间存在关联,因此我想寻求替代方法)

尽管您可以按照其他答案中的说明进行操作(通过创建抽象的Parent实体),但我不建议这样做。 与抽象父母打交道时的表现会很快变差。 这样做的原因是,Core Data会将所有子项放入基础SQLite文件中的单个表中。

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

我建议根据对象的松散程度在Core Data中创建实体。 我不会为本田,福特和道奇创建实体,而是为Car以及可能与制造商的类型或关系创建实体。

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

要回答您的问题:
您不能在单个提取请求下统一不同的实体类型(如果它们不是同一实体的子类)。 您可以定义一个实体( B )从另一个实体( A )继承,然后由父实体( A )提取并获得两种实体( AB

您可以尝试通过以下方式进行思考:

Item (“ Macintosh”,“白芦笋”,...)与Group (“ Apple”,“芦笋”,...)有关系,而Group与“ Area (或仅与另一个父组)有关系。

通过这种方式,您可以使用带有sectionNameKeyPath为“ group.name”和实体Item的单个FRC(您可以按“ group.area”进行过滤以仅选择食品)。

您可能应该研究抽象实体。 例如,您可以创建一个名为Food的抽象实体。 然后,您可以创建Fruit and Vegetables ,它继承了抽象实体。 您必须将Food设置为“父实体”。

然后,您可以使用实体Food (包括FruitVegetables来获取所有物品。 根据您的帖子,您可能会有一个从FoodFoodGroup的关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM