1

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を使用して表示しています。メソッド-[NSTreeControllerinsertObject:atArrangedObjectIndexPath:]を使用してLeafを挿入しようとすると、leafsの親プロパティは正しく設定されますが、親の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はInterfaceBuilderで設定されていますが、NSManagedObjectサブクラスのSavedItem、SavedGroup、およびSavedLeafがあるのになぜNSMutableDictionaryを使用しているのですか。いくつかの例をダウンロードしましたが、私がそうではないのに、彼らが何をしているのかわかりません。

4

1 に答える 1

2

他の人のための解決策は、実際のコアデータ定義でisLeafプロパティを定義する代わりに、賢くしようとしていたことです。GroupまたはLeafのどちらであるかに応じて、trueまたはfalseを返すように実装でハードコーディングしようとしました。これは、基本クラスでも定義している場合でも、何らかの理由でNSTreeControllerがこれを好まないためです。awakeFromInsertメソッドをオーバーライドして、そこに設定しました。

また、NSTreeControllerは、基本クラスのプロパティを何もしない/ nilを返すように定義した場合(つまり、Groupサブクラスがそれをオーバーライドできるように)、エンティティは保存されますが、表示されないことも気になりません。 。これは私の最初の問題を解決するために私がしたことであり、人々が知りたいと思うかもしれないことだと思いました。

于 2012-03-15T10:47:11.583 に答える