ゴトアップデート
アプリケーションデリゲートのコンテンツ( )に()をバインドしたNSTreeController
コントローラーがあります。また、ウィンドウにコントローラーにバインドされているものがあります。Content Object
NSTreeNode *
NSOutlineView
すべて正常に動作し、コンテンツはアウトラインビューで表示されますが、コントローラーメソッドおよび(など)コントローラーのメソッドは常に返されますが、アイテムはadd
(など)できません( 「有効」になっているボタンがコントローラーにバインドされており、このボタンがあります)無効になっています)。addChild
insert
canAdd
canAddChild
NO
私の間違いはどこにありますか?
アップデート
私の状況についてもう少し情報を提供したいと思います。
MyNodeクラスがあります:
@interface MyNode : NSTreeNode {
NSString* title;
}
@property (retain) NSString* title;
@end
nibファイルにもNSTreeControllerオブジェクトがあります。はIBでにchildrenKeyPath
設定され、とは空です。childNodes
countKeyPath
isLeafKeyPath
コントローラモードはに設定されClass
、クラス名はMyNode
です。
コンテンツオブジェクト(コンテンツ配列ではない)は、次のプロパティにバインドされMyDocument
ますrootNode
。
@property (readonly) MyNode* rootNode;
...
rootNode = [[MyNode alloc] init];
rootNode.title = @"Root";
MyNode *childNode = [[MyNode alloc] init];
childNode.title = @"Child";
[[rootNode mutableChildNodes] addObject:childNode];
そして、TreeControllerにバインドされているNSOulineViewがウィンドウにありcontent
ますarrangedObjects
。コンテンツが表示されます。ノードのタイトルを編集することもできますが、TreeControllerを介して(子)ノードを追加または挿入することはできません。
2つのボタンがあります。「子の追加」と「子の挿入」がTreeControllerのアクションに接続されてaddChild
おり、TreeControllerのプロパティにバインドされて有効になっています。ボタンが無効になっています。子ノードを追加または挿入できません。insertChild
canAddChild
canInsertChild
間違いはどこにありますか?
更新2
良いニュースがあります=)
Documentクラスを次のように変更しました。
@interface MyDocument : NSDocument {
NSMutableArray *rootNodes;
MyNode* rootNode;
}
@property (readonly) NSArray* rootNodes;
..
rootNodes = [[NSMutableArray alloc] init];
rootNode = [[MyNode alloc] init];
rootNode.title = @"Root";
MyNode* childNode = [[MyNode alloc] init];
childNode.title = @"Child";
[[rootNode mutableChildNodes] addObject:childNode];
[rootNodes addObject:rootNode];
そして、コンテンツ配列(コンテンツオブジェクトではない)をMyDocument.rootNodes
プロパティにバインドすると、すべてが正常に機能します。
addXXXメソッドが単一のオブジェクトで機能しないのはなぜですか?ドキュメントにそれについて何も見つかりません...
そして、なぜTreeControllerはルート要素をrootNodes
?に追加できるのでしょうか。rootNodes
は、NSArray
ではなく、NSMutableArray
です。