問題タブ [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.
objective-c - NSOutlineView -- 複数のソースを組み合わせる
私のアプリには、NSOutlineView
からデータを取得する がNSTreeController
あり、これはコア データ モデルからデータを取得します。
私が今やりたいことは、グループの見出しと、場合によっては追加の行をアウトライン ビューに追加することです。これは明らかに、モデルの外に存在し、ビューの一部であるべきものです。しかし、これについて頭を悩ませている限り、基になるモデルを変更せずにアウトラインビューにこれらのものを表示させる方法は考えられません。これは明らかに大きな問題です。
よろしくお願いいたします。ここで明らかな何かが欠けているような気がします...
objective-c - NSOutlineView: 開示三角形とインデントを削除
私はプロジェクトに NSOutlineView を使用していますが、2 つのことを理解できないようです。
- ツリー ノードの開閉用三角ボタンを削除する方法。iTunes などのアプリでは、次のことができるようです。
これに使用されるある種の NSOutlineView Delegate メソッドはありますか? それともサブクラスが必要ですか?
- アイテムのインデントを無効にする方法。setIndentationPerLevel:を使用して 0 に設定し、Interface Builder で列のインデントを 0 に変更しようとしましたが、効果がないようです。
cocoa - 各親アイテムの子 NSTableView 設定をどのように保存しますか?
NSTableView
親の各アイテムの の設定を (理想的にはその自動保存機能を活用して) 保存する最良の方法は何NSTreeController
ですか? 私は基本的に、iTunes が各プレイリストの列設定を個別に保存する方法を再現しようとしています。
ただし、多くの列があり、個々の列のサイズなどをすべて手動で保存したくありません。Core Data も使用しており、既存のデータ モデルを使用してこの情報を保持するソリューションが大好きです。
アップデート
の列設定の表現を簡単に保存および読み取ることができるいくつかのコード ( Daniel Jalkut からの a ) を見つけました。Category
そのため、現在そのエンティティのビューの設定を保存している Core Data エンティティにバイナリ属性を作成しました。NSDictionary
NSTableView
私ができるようにしたいのは、エンティティの各インスタンスが選択されると、設定を自動的に取得することです。で Key-Value Observation を使用してこれを実行しようとしましたNSTreeController
が、残念ながら適切な通知が得られません。新しいノードの設定で上書きする前に、前のノードの設定を保存できるように、切り替える項目を知りたいです。
@"selection"
、@"selectedObjects"
、および を、見つけ@"selectedIndexPaths"
られるすべての引数で観察しようとしましたが、どれも適切に機能していないようでした。適切なタイミングで通知を受け取りますが、プロパティの変更によって送信される辞書options
に有用な情報がありません。"change"
cocoa - NSTreeController 追加された子を取得
NSTreeController -(void)addChild:(id)sender
が呼び出されたときに、作成されたものを取得する方法はありNSManagedEntity
ますか?
ドキュメントには、このメソッドの結果が次のループ実行まで延期されることが記載されています。
cocoa - NSOutlineController を使用して NSTreeController からすべての要素を削除する方法
NSTreeController
withを使用しNSOutlineController
て、1parent-1child 階層でコンテンツを表示しています。私の構造は次のようなものです:
- 親
- 子
- 親
- 子
ユーザーが更新ボタンを押すと、すべてのノードを削除して再度補充したいと思います。
しかし、何も機能していないようです。
ビンジングNSTreeController
がNSArrayController
役立つと思いますが、バインドする手順が本当にわかりませNSArrayController
んNSTreeController
--- NSOutlineController
。
objective-c - Cocoaバインディングを使用した編集可能なOutlineView
アイテムを編集できるように、NSOutlineView(またはNSTableView)をどのようにバインドしますか?編集可能なフィールドがあることは知っていますが、使用方法がわからないので、何か助けがあればいいのですが。NSArrayにバインドするNSTreeControllerがあります。ありがとう。
objective-c - エンティティを NSTreeController の子としてバインドする正しい方法
間に関係を持つ 2 つの別個のエンティティにバインドされてNSOutlineview
いるwhoを に取り込む方法についての私の理解は正しいですか。NSTreeController
MyNSTreeController
には、 my にバインドされた managedObjectContext がありますappDelegate
。私のこれはclientObject Controller
という名前のエンティティです。Myは(およびclientの) clientCompanyにバインドされており、これにより myに会社名のリストが正しく入力されます。NSOutlineViews
tableColumn
NSTreeController
key path
NSOutlineView
2 番目のエンティティーprojectsには、クライアント内のclientChildというプロパティーに逆バインドされたprojectParentという関係プロパティーがあります。この関係を通じて、関連するclientCompanyを親として持つ関連するプロジェクトエントリで my の子を構成したいと考えています。NSTreeController
これを試みるために、私はclientChildchildren
key path
を myに作成し、同じコントローラの my をクライアントエンティティのclientChildNSTreeController
に「selected」としてバインドしました。content set
key path
Controller Key
この方法とさまざまな組み合わせは機能しないようで、さまざまなエラーが発生します。content set
プログラムが起動時にエラーなしで実行され、outlineview エントリの横に開く/閉じるアイコンが表示される最後の ' ' バインド ステップを省略した場合にのみ、希望どおりに入力されていることが示されます。エントリの 1 つを開こうとすると、プロジェクトエンティティがclientChildプロパティに準拠した KVC ではないことを示すエラーが生成されます。バインディングを何度も調べましたが、問題が見つからないようです。
xcode - IB と 2 つのエンティティの関係を使用して OutlineView を設定する方法はありませんか?
以前に他の人でこの質問に触れましたが、以前の質問への回答を書いた後、なぜこれが不可能なのか疑問に思いました-または、可能性があるという事実を見逃していますか?
Interface Builderが、さまざまなメソッド、デリゲート、およびデータ ソースをグラフィカルにリンクするのに非常に優れていることを考えると、親子関係が設定されているモデルでOutlineView
作成された 2 つのエンティティを使用して、直接的なグラフィカルな手段がない可能性があります(私は信じています)。 ) 子ノードが?Core Data
の下にリストされる親ノードを定義するのに十分な情報があります。outlineview
これは、2 つの異なる情報源を保存し、後でそれらの関係を表示するための非常に論理的な方法であると考えているため、混乱します。現時点では、 を使用せずNSTreeController
に、自分の を使用してdatasource
、現在の能力をはるかに超える領域に足を踏み入れようとしています。
objective-c - mouseDownが頻繁に中断された後に更新されるNSTreeControllerのselectionIndexPaths
問題の背景:
NSOutlineViewがあり、すべてのtableColumnがプログラムでNSTreeControllerのarrangedObjectsにバインドされているため、selectionIndexPathsをバインドする必要はありません。NSTreeControllerのarrangedObjectsのソースはmutableArrayです。- (void)insertObject:(id)object atArrangedObjectIndexPath:(NSIndexPath *)indexPath;
メインスレッドで実行することにより、すべてのノードを動的にNSTreeControllerに追加しています。NSOutlineViewのmouseDownイベントを次のようにオーバーライドしました。
- (void)mouseDown:(NSEvent *)event { /*...myMethods...*/ [super mouseDown:event]; }
問題:
ノードが非常に高速に追加され、outlineViewでmouseDownイベントを実行すると、次の状況が頻繁に発生します。
TreeControllerにノードを追加するスレッドは、mouseDownイベントによって呼び出されるシーケンス(おそらく)を中断するため、そのinsertObject: atArrangedObjectIndexPath:
前に呼び出されsetSelectionIndexPaths:
ます。そのため、outlineViewの新しい選択は消え、treeControllerには古いバージョンのselectedIndexPathsが残っています。
私は1つの部分的な解決策を試しました:outlineView全体を変更できないように、insertObject:
メソッドを(で)ブロックしましたが、スレッドの競合が発生し、アプリがフリーズすることがよくあります。@synthesized(outlineView)
選択範囲が消える問題を解決する方法はありますか?
cocoa - アウトライン ビューで NSXMLDocument を表示するときに TreeController のコンテンツ オブジェクトを設定するにはどうすればよいですか
アウトライン ビューで NSXMLDocument を表示したいと思います。ありがたいことに、apple には「NSXML オブジェクトでツリー コントローラを使用する」というドキュメントがあります。
しかし、私が得られなかったのは、TreeController のコンテンツ オブジェクトをどのように設定したかということです。
まず、表示したい NSXMLDocument に「Bind to」を設定し、その rootElement に「Model Key Path」を設定します。しかし、それはうまくいきません。
プロパティとして NSXMLDocument を持つオブジェクトに「バインド先」を設定し、「モデル キー パス」を NSXMLDocument.rootElement に設定する必要があることがわかりました。
では、なぜですか?