問題タブ [nstreecontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
756 参照

xcode - Interface Builder で NSTreeController を構成する方法

Interface Builder (Xcode 4.6.3) でを選択NSTreeControllerし、属性インスペクターを見ると、Tree Controller と Object Controller という名前の 2 つのセクションが表示されます。Tree Controller の部分はある程度理解できますが、Object Controller セクションの説明を見つけるのに苦労しています。最初の項目は「モード」で、オプションは「クラス」と「エンティティ名」ですが、コアデータを使用する場合は後者、使用しない場合は前者を使用すると思います。私はコアデータを使用していません。では、次の項目であるクラス名の意味は何ですか? デフォルトはNSMutableDictionaryですが、標準のツリー ノード タイプは だと思いましたNSTreeNodeNSTreeNode具体的には、表現されるオブジェクトが であるツリー ノードを にしたい場合NSMutableDictionary、オブジェクト コントローラ セクションにどのように入力すればよいでしょうか?


回答後の補足: type のノードを使用してアウトライン ビューのコンテンツ ツリーを構築できることがわかりNSMutableDictionaryましたが、 のサブクラスを作成することには利点がありNSTreeNodeます。まず、NSTreeNode親リンクを自動的に追跡します。これは場合によっては便利です。次に、データ メンバーをプロパティとして定義し、メッセージではなくドット表記を使用してそれらにアクセスできobjectForKey:ます。

0 投票する
2 に答える
615 参照

cocoa - コンテンツの更新時に NSOutlineView がトップにジャンプする

NSOutlineViewディレクトリ階層を表示している があります。これNSTreeControllerは、ファイル システム ノードを管理するクラスにバインドされています。ファイルシステム イベントが発生すると、キーパスで KVO 通知を起動しchildrenます。これにより、アウトライン ビューが更新されます。しかし、更新すると、突然一番上までスクロールします。スクロール位置を同じに保ちたい。何か案は?

FS イベントが発生したときに実行されるコードは次のとおりです。

これはモデル内にあるため、ビューにアクセスできません。

0 投票する
1 に答える
101 参照

objective-c - ツリーの KVC アクセサー パターン

このドキュメントでは、Apple は、To-One および To-Many プロパティのアクセサ パターンについて説明しています。To-Many プロパティは、インデックス付きコレクションと順序付けされていないコレクションをカバーします。

これは私に質問をもたらします:
ツリー構造には異なるアクセサーパターンがありますか?それとも他のタイプのコレクションと同じように使用 (または適応) する必要がありますか?

どうやら、モデルに Indexed To-Many アクセサーを実装してブレークポイントを設定してもNSArray、ツリー構造の保持がNSTreeController. 要素の追加/削除、順序の変更など、モデルは正しく更新されますが、アクセサーの実装は呼び出されません。

ここで何か不足していますか?

0 投票する
1 に答える
390 参照

objective-c - NSTreeController: ノードの親を見つけるにはどうすればよいですか?

同様の方法を探しています: NSOutlineView parentForItem:NSTreeController 用。

ツリー内のノードの親を知る必要があります。

0 投票する
1 に答える
200 参照

cocoa - NSOutlineView または NSTreeController からの表示から NSElements を削除します

NSXMLDocument によって駆動される NSTreeController にバインドされた NSOutlineView で、(同じタイプの) 一部の NSElements のみを表示し、他のものは表示しないようにするにはどうすればよいですか?

ありがとう

0 投票する
1 に答える
724 参照

objective-c - NSTreeController と NSOutlineView を動的に更新する方法は?

OutlineViewItem が展開されている場合 -

- オブジェクトを TreeController に正常に追加できます (ログ ステートメントは、階層の正しい場所に新しく追加されたオブジェクトを示します) が、OutlineView/UI はその挿入を反映するように更新されません。

無駄に、私は使用しました

  • [self.outlineView reloadItem:nil reloadChildren:YES]

  • [self.outlineView reloadData]、さらには

  • [self.outlineView setHidden:YES]それから
    [self.outlineView setHidden:NO]

構造を強制的にリロードしようとします。

これはすべて、Objective-C でプログラムによって行われます。

0 投票する
1 に答える
202 参照

cocoa - NSTreeController - 選択したノードの取得

bookController (NSCreeController) に Book オブジェクトを追加しました。行を選択したときに、保存された Book オブジェクトを取得したいと思います。

0 投票する
1 に答える
134 参照

objective-c - NSTreeController: カスタム プロパティ キーパスの KVO が失敗します。

セットアップ

私はNSTreeControllerサブクラスを持っています。selectedProjectカスタムであり、ヘッダーで次のように宣言されているというプロパティがあります。

プライベート実装では次のようになります。

重要なのは、TreeController で変更するすべてのポイントでselectedProject、生成されたセッター/ゲッターを通過することです。iVar を直接変更することはありません。

基本的に、このプロパティが存在する理由は、通常のプロパティselectedObjectsselectionプロパティNSTreeControllerが型指定されていないためです。この TreeController は常に LPProject オブジェクトのみを管理し、一度に選択できるプロジェクトは 1 つだけであることがわかっているため、クリーンな iVar が必要でした。 selectedObjects を常に取得するのではなく、存在するかどうかを確認し、配列内の最初のオブジェクトを取得するなどの方法を使用します。


LPプロジェクト

LPProjectCore DataのカスタムNSManagedObjectサブクラスです。という名前のプロパティがありますenabled。このプロパティは、NSNumber で表される BOOL です。そのためのゲッター/セッターは Xcode によって生成されます。


問題

いくつかのコントローラーで、次のようにオブジェクトのenabledプロパティを監視しようとします。selectedProject

selectedProjectKVO 通知が変更 (およびその結果の変更)時に届くことを確認しましたselectedProject.enabled。ただし、プロパティのみが変更された場合(つまり、選択したプロジェクト自体が変更されていない場合)、KVO 通知は届きません。enabledselectedProject

ただし、代わりにこの方法で購読する場合:

それは完全に機能します。enabled変化して変わらない場合selectedProject、KVO 通知が届きます。

KVOに準拠していて、キーパスが機能するはずだselectedProjectと思うので、私はこれに混乱しています。.enabled

誰でもこれに光を当てることができますか?私は何を逃したのですか?