NSTreeController не устанавливает дочерние атрибуты Core Data - PullRequest
1 голос
/ 12 марта 2012

Мой NSTreeController устанавливает родительские атрибуты Core Data, но не дочерние атрибуты.

У меня есть модель Core Data, подобная этой

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, родительское свойство листьев установлено правильно, но родительское свойство Group.children остается равным nil.

Когда я запускаю проект, на консоли появляется следующее предупреждение

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. Я скачал пару примеров, но я не вижу, что они делают, а я нет.

1 Ответ

2 голосов
/ 15 марта 2012

Решение для других, я пытался быть умным и вместо определения свойства isLeaf в действительном определении основных данных. Я пытался жестко закодировать его в реализации как возвращающее true или false в зависимости от того, было ли это Group или Leaf , для некоторых причине NSTreeController это не нравится, даже если вы также определили его в базовом классе. Я переопределил метод awakeFromInsert и установил его там.

Также интересно, что NSTreeController также не понравится, если вы определите свойство children в базовом классе, чтобы ничего не делать / возвращать nil (т.е. таким образом, подкласс Group может переопределить его), children сущностей будут сохранены, но они не будут отображаться. Это то, что я сделал, пытаясь решить мою первоначальную проблему, я подумал, что это то, что люди хотели бы знать.

...