簡體   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