2016-02-06 62 views
1

來自iOS,我被困在NSOutlineView作爲源列表,我已經閱讀了很多資源,但無法清楚地把握它。如何創建SourceList以顯示Core Data ToMany關係?

我想要的是,使用NSTreeController將coreData ToMany關係顯示爲sourceList。我將數據從文本文件保存到磁盤。 實體和關係如下:

Group >> Item >> Description

data model

SOURCELIST例子:

enter image description here

我的應用程序不允許用戶創建任何新的實體,只是爲了查看從什麼保存文本文件。我可以通過NSArrayController來做到這一點,但我需要在具有層次結構的單個表中顯示數據。 在NSArrayController中,我只需要將託管對象上下文綁定到參數,將對象控制器綁定到實體名稱。在TableView中,我需要將內容和選擇索引綁定到NSArrayController。

如何將NSTreeController綁定到SourceList,並且在選擇子級時,顯示Item到Description的另一個ToMany關係。

回答

1

我可以想到兩種解決方案,也許有更好的解決方案。

解決方案1: 創建NSTreeController的子類,並覆蓋

- (NSString *)childrenKeyPathForNode:(NSTreeNode *)node 

被管理對象是node.representedObject

解決方案2: 創建NSManagedObject子類並實現返回子關係的children方法。

- (NSSet *)children { 
    return self.itemsInGroup; 
} 

將樹控制器的childrenKeyPath設置爲'children'。

我認爲解決方案2感覺不對,管理對象不應包含視圖代碼,但如果您已經擁有NSManagedObject子類,則實現起來非常容易。

+0

,源列表僅顯示組中的頂級列表。當我披露三角形時,出現錯誤:實體項目不是關鍵字「名稱」的關鍵字編碼標準。所以它獲取關係NSSet itemsInGroup,我需要在哪裏輸入NSTreeController中的Item Entity的「name」屬性。 – Khundragpan

+0

實體'Item'是否還有屬性'name'?關鍵字'name'可能在大綱視圖的綁定中。 – Willeke

+0

我將屬性名稱更改爲標題(它變得沒有多少混淆),是否這兩個實體屬性必須具有相同的名稱。 – Khundragpan

相關問題