2012-03-12 31 views
1

我的NSTreeController設置核心數據的父級屬性而不是子級屬性。NSTreeController沒有設置核心數據的子屬性

我有這樣

Item 
    title (string) 
    isLeaf (boolean,readonly) 
    parent -> Group (inverse children) 

Group (parent entity Item) 
    children -> Item (inverse parent) 

Leaf (parent entity Item) 

核心數據模型,我再與NSOutlineView顯示它並使用NSTreeController。我使用方法 - [NSTreeController insertObject:atArrangedObjectIndexPath:]嘗試插入Leaf's,葉子父級屬性設置正確,但父級Group.children屬性仍然設置爲零。

當我運行該項目,我得到的控制檯

Warning: <NSTreeController: 0x7fcd93c19d20>[object class: NSMutableDictionary] childrenKeyPath cannot be nil. To eliminate this log message, set the childrenKeyPath attribute in Interface Builder 

即使childrenKeyPath在界面生成器設置以下警告,爲什麼它使用的NSMutableDictionary時,我有一個NSManagedObject子類SavedItem,SavedGroup和SavedLeaf。我已經下載了幾個例子,但我不明白他們在做什麼,我不是。

回答

2

對他人的解決方案,是我試圖變得聰明,而不是在實際的核心數據定義中定義isLeaf屬性。我試圖在執行硬編碼爲返回真正取決於它是否是集團或,出於某種原因NSTreeController不喜歡這一點,即使你還定義它基類。我已經覆蓋了awakeFromInsert方法並將其設置在那裏。

還關注的是,NSTreeController也不喜歡它,如果你定義孩子財產在基類什麼都不做/返回(即這樣的集團子類可以重寫它) ,子女實體將被保存,但不會顯示。這是我在試圖解決我最初的問題時所做的,我認爲這是人們可能想知道的。