問題タブ [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 - 2つの異なるコアデータNSManagedObjectエンティティを持つNSTreeController
iOSアプリをMacに移植していて、エンティティの階層を管理するためにNSTreeControllerをセットアップしたいと考えています。この階層には、グループとアイテムの2つの異なるNSManagedObjectタイプがあり、1対多の関係(1つのグループから多くのアイテム)があります。ただし、NSTreeControllerの設定に問題があります。エラーメッセージが表示されます:
NSTreeControllerは、子がそれ自体を参照する1つのタイプのNSManagedObjectでセットアップすることを目的としているようであり、子を別の種類のオブジェクトにすることは機能しません。これは正しいです?もしそうなら、軽量の移行を使用して新しいデータモデルを古いデータモデルから適切に移行できるようにしながら、これを修正するために何をする必要がありますか?2種類のNSManagedObjectsを使用してNSTreeObjectを実際に実行できる場合、どのように設定すればよいですか?
objective-c - 選択した NSTreeController オブジェクトのすべての子、孫、および孫を取得するにはどうすればよいですか
私はこの単純化されたモデルを持っています: http://i.imgur.com/EAug3.png
これらの要素を NSOutlineView で並べ、NSTreeController で制御しています。
だから私はいくつかのダミーデータを作成しました:
問題は次のとおりです。Folder1 を選択した場合は Element1、Element2、Element3 を保持し、Subfolder1 を選択した場合は Element1 と Element2 を保持する配列を取得するにはどうすればよいですか?
私の最初のアプローチは、NSTreeController オブジェクトのカスタム プロパティにバインドされた新しい NSArrayController を作成することでしたが (そのためのクラスを派生させました)、そのプロパティは 1 回だけ呼び出され、その後は更新されませんでした。私の2番目のアプローチは、フェッチ述語を書くことでしたが、うまくいきませんでした... :(
何か案は?
cocoa - ビュー ベースの NSOutlineView 親ビューの上に子ビューを描画する
NSOutlineView + NSTreeController + Core Data を使用すると、アウトライン ビューのレイアウトが奇妙になります。下の画像でわかるように、アウトライン ビューは、「親」が展開されたときに「子」用のスペースを作成しますが、代わりに「親」の上に「子」を描画します。押されたときにビューを正しく描画する [outlineVIew reloadData] メソッドを呼び出すボタンを作成しました。
コア データ モデル:
- 親
- 子供
- 葉
- 名前
私のxibセットアップ:
- NSOutlineViewデリゲートはファイルの所有者に設定されています
- NSTreeController はドキュメントの Core Data コンテキストにバインドされています
- NSTableColumn は NSTreeController.arrangedObjects にバインドされています
- NSTextField は NSTableCellView.objectValue.name にバインドされています
NSPersistentDocument クラス:
結果:
親が折りたたまれたアウトライン ビュー
親が展開され、子が上に描画されたアウトライン ビュー
cocoa - NSTreeController の子をコア データにバインドする方法は、to-many-relationship を注文しましたか?
Apple は、Lion の Core Data に順序付けられた多対多の関係を導入しました。1:1-object-relation、1:1-parent-relation、および順序付けられた to-many-relationship の子を持つ TreeNode という名前のエンティティを作成しました。
次にNSTreeController
、子のキー パスを TreeNode.children に設定します。アプリケーションを実行すると、最初のレベルの要素のみが表示されます。だから子供は働かない。children は順序付けられた対多の関係であるため、対応するクラスにはNSOrderedSet
子があります。カスタムメソッドを追加しました
動作する TreeNode に。そのトピックに関するドキュメントは見つかりませんでした。NSTreeController
順序付けられた対多関係にバインドするとき、それは本当に進むべき道ですか? 前もって感謝します。
nspredicate - NSSearchField で NSTreeController をフィルタリングする
この質問は以前に尋ねられたようですが、答えはありませんでした。NSSearchField で NSTreeController をフィルタリングすることは可能ですか? もしそうなら、どのように?
ありがとう!
objective-c - NSTreeControllerのaddメソッドとaddChildメソッド
ゴトアップデート
アプリケーションデリゲートのコンテンツ( )に()をバインドしたNSTreeController
コントローラーがあります。また、ウィンドウにコントローラーにバインドされているものがあります。Content Object
NSTreeNode *
NSOutlineView
すべて正常に動作し、コンテンツはアウトラインビューで表示されますが、コントローラーメソッドおよび(など)コントローラーのメソッドは常に返されますが、アイテムはadd
(など)できません( 「有効」になっているボタンがコントローラーにバインドされており、このボタンがあります)無効になっています)。addChild
insert
canAdd
canAddChild
NO
私の間違いはどこにありますか?
アップデート
私の状況についてもう少し情報を提供したいと思います。
MyNodeクラスがあります:
nibファイルにもNSTreeControllerオブジェクトがあります。はIBでにchildrenKeyPath
設定され、とは空です。childNodes
countKeyPath
isLeafKeyPath
コントローラモードはに設定されClass
、クラス名はMyNode
です。
コンテンツオブジェクト(コンテンツ配列ではない)は、次のプロパティにバインドされMyDocument
ますrootNode
。
そして、TreeControllerにバインドされているNSOulineViewがウィンドウにありcontent
ますarrangedObjects
。コンテンツが表示されます。ノードのタイトルを編集することもできますが、TreeControllerを介して(子)ノードを追加または挿入することはできません。
2つのボタンがあります。「子の追加」と「子の挿入」がTreeControllerのアクションに接続されてaddChild
おり、TreeControllerのプロパティにバインドされて有効になっています。ボタンが無効になっています。子ノードを追加または挿入できません。insertChild
canAddChild
canInsertChild
間違いはどこにありますか?
更新2
良いニュースがあります=)
Documentクラスを次のように変更しました。
そして、コンテンツ配列(コンテンツオブジェクトではない)をMyDocument.rootNodes
プロパティにバインドすると、すべてが正常に機能します。
addXXXメソッドが単一のオブジェクトで機能しないのはなぜですか?ドキュメントにそれについて何も見つかりません...
そして、なぜTreeControllerはルート要素をrootNodes
?に追加できるのでしょうか。rootNodes
は、NSArray
ではなく、NSMutableArray
です。
cocoa - NSTreeController が reloadData に応答しない
クラスへのバインディングを持つ NSTreeController があります。
NSOutlineView dirTree は NSTreeController にバインドします
具体的には、Outline View Content は ArrangedObjects にバインドします
これはうまく機能しているように見えますが、reloadData に応答しない理由を突き止めようとしています。
NSTreeController キー パスは次のとおりです。
これらは以下にリストされています。numberOfSubDirs は、サブディレクトリの単純な数を返します (診断表示が追加されています)。
データを更新するリフレッシュ関数を呼び出すと、[dirTree reloadData] が呼び出されます。次の出力が得られます:-
ディレクトリを削除して (Finder の外部で)、更新機能を呼び出すと、次の出力が得られます。
NSTreeController は、親 "Shared" で numberOfSubDirs を呼び出し、現在 6 つのサブディレクトリがあることを正しく通知されます。
ただし、削除されたアイテム「bZTree2」を含む 7 つのサブディレクトリを照会し、存在する 6 つだけを表示するように表示を更新しません。
nsoutlineview - NSOutlineView で Control Click のターゲットを取得するにはどうすればよいですか
NSTreeController によって制御される NSOutlineView があります。NSOutlineView は、Interface Builder のコンテキスト メニューに接続されています。
Control Click でメニューが表示され、クリックされた行が「選択」され、境界線のある淡いハイライトが表示されます。
どの行が「選択されている」かを見つける方法が見つからないようです。selectionIndexPath と selectedObjects は nil です。
objective-c - NSTreeControllerとNSOutlineViewを使用してアイテムの編集を監視する方法
をNSOutlineView
使用してデータを入力しましたNSTreeController
。ツリーコントローラーは、次のようなプロパティを持つ配列を管理しNSMutableDictionary
ます。NSString *name
and NSArray* children
name
UIで変更されたときに通知を受け取るにはどうすればよいですか?
cocoa - NSTreeController の「arrangedObjects」とは正確には何ですか?
NSTreeController の「arrangedObjects」をカスタム ビューの「managedContent」にバインドしようとしています (たとえば、カスタム アウトラインを表示できるようにするため)。セッターで…
newManagedContentArray ("arrangedObjects") は明らかに NSArray ではないため (したがって、addObject などを追加することはできません)、何も機能しなくなります。代わりに、NSControllerTreeProxy として表示されます。私の質問は、「arrangedObjects」とは正確には何ですか? 私はそれにバインドすることになっていますか?もしそうなら、どのように?