2009-11-08 59 views
6

我試圖在iTunes Genre瀏覽器的樣式中爲我的核心數據模型創建一個簡單的接口。在Cocoa中實現父 - >孩子向下展開跨越多個實體的核心數據綁定

我有三個實體的模型設置:Genre <-->> Artist <-->> Album

我想簡單地將它們綁定到NSTableView,但它看起來好像從NSArrayController訪問兒童關係不符合KVC。所以,我無法將選定的類型對象傳送到ArtistController。

你是如何做到這一點的?在沒有任何自定義子類的情況下,它甚至可以在IB中使用?

編輯後人:我做了幾件事情錯了。

  • 子控制器需要通過自己的綁定知道managedObjectContext。
  • 孩子控制器必須不是Entity模式,而是作爲NSMutableDictionary類操作。
  • 最後,子控制器不準備其數據。它通過Content Set綁定從父級檢索它。使用控制器密鑰selection以及連接到孩子的模型關鍵路徑。

phew。 Brian的答案和this MacResearch tutorial都有助於確定我的錯誤(以及我有哪些部分是正確的)。

回答

4

我可能會採取的方法是爲每個表視圖有一個單獨的NSArrayController,然後讓一個數組控制器的內容基於另一個的選擇。

例如,假設您的表視圖A顯示可用流派的列表,因此它具有一個數組控制器A,其內容與您的託管對象上下文相關聯。

然後,假設您有表格視圖B,它顯示了表格A中選擇的任何類型的可用藝術家。該表格將具有其自己的陣列控制器B,並且控制器B的內容數組被綁定,所以「控制器鍵「IB中的字段被設置爲控制器A的」選擇「鍵,其中」藝術家「是模型鍵(這假定你的體裁實體與藝術家實體具有名爲」藝術家「的多對多關係)。

然後,您可以將相同的原則應用於第三個表格視圖+控制器,以顯示所選藝術家的專輯。

對於這種設置的總稱,是一種「主從接口」,並在this link

+0

是在蘋果的文檔概述,這正是我試過了。我得到了運行時錯誤:'[MBGenre 0x20003c5a0> valueForUndefinedKey:]:實體MBGenre不是關鍵值編碼 - 關鍵字「藝術家」符合我試過六七種不同的訪問子關係的方式,沒有一個工作。感謝您的意見;這讓我感覺不那麼瘋狂。 – 2009-11-09 02:08:27