2013-07-16 102 views
0

之間的關係在應用程序中我開發的創建NSFetchedResultsController部分,我有有用戶小工具其中一個用戶可以擁有多少小部件作爲其所有者或手錶核心數據模型Widgets作爲衆多觀察者之一。對於我應用程序中的屏幕,我想要顯示一個包含兩個部分的表格視圖:給定用戶擁有的第一個列表小部件,而另一個顯示用戶正在觀看的小部件。基於類型的實體

所以基本上這歸結爲在給定的窗口小部件是否由觀察家所有者關係相關的用戶基礎部分。有沒有簡單的方法來實現這一點?

回答

1

您可以在用戶和小部件之間有兩種關係。用戶實體將擁有widgets和watchedwidgets,而Widget實體將擁有所有者和觀察者。

User     Widget 
------    -------- 
ownedWidgets <----->> owner 
watchedWidgets <<-->> watchers 

編輯

沒有注意到這個問題稱號NSFetchedResultsController!您遇到的問題是FRC使用sectionNameKeyPath屬性根據一個屬性確定節。您已經完成了這些關係的工作,並且您沒有一個屬性可以涵蓋這兩種情況。

我的建議是從特定用戶實例ownedWidgetswatchedWidgets中創建兩個數組,並使用您在FRC中使用的相同排序描述符進行排序,然後將這些數組用於表視圖。當FRC更新行時,您可以在調用[tableView endUpdates]之前重新創建這些數組。節省必須改變您的數據模型以適應一個視圖控制器設計。老實說,如果你已經有User對象,你已經有了需要通過關係的Widgets,所以你並不需要去獲取任何東西。你可能想要考慮你是否真的需要FRC。

如果您確實需要使用FRC - Erik H.的答案將是您的選擇。

+0

是的,這基本上是我現在設置數據模型的方式;這不是問題。問題是我想根據它們是否由'ownedWidgets'或'watchedWidgets'屬性關聯來將小部件分成不同的部分。 – rpowell

+0

啊,是的,對不起,更新了答案。 – ChrisH

+1

是的,最新的建議是我過去如何解決這個問題 - 如果您想自己做一些額外的工作來管理變更,這是一個好方法。但是,如果您確實想要使用FRC,我認爲我的答案是要走的路。 – ehope

1

這取決於您的數據模型。我想你可以通過使用一箇中間對象UserWidget並且具有關係類型,所有者或觀察者的屬性(如relationshipType)來達到此目的。那麼你的提取可能在UserWidgetssectionNameKeyPath可能是relationshipType

+0

這實際上似乎是一個很好的解決方案。也許有點databse-y,但如果UserWidget連接實體只是對常規關係的冗餘級別,它可能會工作。 – rpowell