1

ゴトアップデート

アプリケーションデリゲートのコンテンツ( )に()をバインドしたNSTreeControllerコントローラーがあります。また、ウィンドウにコントローラーにバインドされているものがあります。Content ObjectNSTreeNode *NSOutlineView

すべて正常に動作し、コンテンツはアウトラインビューで表示されますが、コントローラーメソッドおよび(など)コントローラーのメソッドは常に返されますが、アイテムはadd(など)できません( 「有効」になっているボタンがコントローラーにバインドされており、このボタンがあります)無効になっています)。addChildinsertcanAddcanAddChildNO

私の間違いはどこにありますか?

アップデート

私の状況についてもう少し情報を提供したいと思います。

MyNodeクラスがあります:

@interface MyNode : NSTreeNode {
    NSString* title;
}

@property (retain) NSString* title;


@end

nibファイルにもNSTreeControllerオブジェクトがあります。はIBでにchildrenKeyPath設定され、とは空です。childNodescountKeyPathisLeafKeyPath

コントローラモードはに設定され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のプロパティにバインドされて有効になっています。ボタンが無効になっています。子ノードを追加または挿入できません。insertChildcanAddChildcanInsertChild

間違いはどこにありますか?

更新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です。

4

2 に答える 2

0

私はそれを持っていると思います!に設定childrenKeyPathしてみてくださいmutableChildNodes

于 2011-09-12T18:37:53.667 に答える
-1

書き込みによってノードを追加しないでください

[rootNodes addObject:rootNode];

代わりに、XIB/NIB ファイル (MyDocument クラス) のファイルの所有者にこれを含める必要があります。

IBOutlet NSTreeController* treeController;

そして、この Outlet in IB を Tree Controller に接続します。次に、次のように記述します。

//[rootNodes addObject:rootNode];
  [treeController addObject:rootNode];

そうすることで、rootNodes init を取り除くこともできます。

//rootNodes = [[NSMutableArray alloc] init];

また、子ノードを追加するには、次を使用できます

[treeController addChild:childNode];

これにより、現在選択されているノードに childNode が追加されます。

于 2011-12-12T15:48:59.140 に答える