問題タブ [nsoutlineview]
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.
cocoa - ドラッグ アンド ドロップによる NSOutlineView
ここで Outlineviews と DND に関する他の投稿を読みましたが、プログラムを動作させることができません。この投稿の最後に、私のプロジェクトの zip へのリンクがあります。アウトラインビューとボタンのみの非常に基本的なものです。ドロップされたテキスト ファイルを受信したいのですが、コードまたは接続に問題があります。Apple の NSOutline ドラッグ アンド ドロップのサンプル コードに従ってみましたが、何かが欠けています。1 つの違いは、私のプログラムはドキュメント ベースのプログラムであり、その例はそうではないことです。デリゲート アクションを受け取るようにファイルの所有者を設定しました。これは、ドラッグ アンド ドロップとボタン アクションを処理するコードがそこにあるためです。それはおそらく単純な間違いなので、誰かがそれを見て、私が間違っていることを教えてもらえますか?
iphone - UITableView からのアウトライン ビュー
UITableView から 1 レベルのアウトライン ビューを実装する必要があります。子を持つセルには「+」記号が付き、ユーザーがそれをタップすると、その下のセルが下にスライドし、現在選択されている行の子セルが表示されます。セルのスライドが表示され、ユーザーが既に展開されている行の「-」ボタンをタップすると、子セルがスライドして親に戻ります。
グーグルを試しましたが、ポインタが見つかりませんでした。
UITableView をサブクラス化する必要がありますか? または、独自のビュー サブクラスを実装して、そこにあるすべてのものを処理する必要がありますか?
すべての行選択を処理するので、UITableView をサブクラス化する方が簡単だと思いますが、その方法がわかりません。
よろしくお願いします、ラージ
cocoa - NSFormatter に NSTextFieldCell を継続的に検証させる
Cocoa には、セルが NSTextFieldCell である NSOutlineView があります。セルには、特定のルール (float、または間にスペースを入れた float のペアなど) に従って書式設定された文字列である値が表示されます。テキストを検証するためにカスタム NSFormatter を作成しましたが、これは問題なく動作するようです。
ただし、セル(またはアウトラインビュー、何が原因かはわかりません)は、編集が終了する瞬間にのみフォーマッターを使用しているようです。テキスト フィールドにアルファベット文字を入力すると (書式設定規則に違反します)、これらの文字が表示されます。フォーマッタが機能していることに気付く唯一の方法は、キーボード フォーカスをこのセルから移動できなくなったことです。セルの内容を有効なフォームに戻すと、フォーカスを移動できます。
セルとアウトライン ビューの両方を「連続」に設定しました。
そもそもセルにテキストを入力できなかった方がよいでしょう。そのようにすることは可能ですか?
cocoa - CocoaNSOutlineViewとドラッグアンドドロップ
最近、アカウントなしで別のスレッドを開始したので、他のユーザーがこれをフォローできるように、プログラムへの現在のリンクを編集できるように、アカウントを使用してここに質問を再投稿しています。以下のコードも更新しました。これが私の最初の質問です:
ここでOutlineviewsとDNDに関する他の投稿を読みましたが、プログラムを動作させることができません。この投稿の下部には、私のプロジェクトのzipへのリンクがあります。アウトラインビューとボタンだけの非常に基本的なものです。ドロップされたテキストファイルを受信したいのですが、コードまたは接続に問題があります。AppleのNSOutlineドラッグアンドドロップのサンプルコードに従ってみましたが、何かが足りません。1つの違いは、私のプログラムはドキュメントベースのプログラムであり、その例はそうではないということです。ドラッグアンドドロップとボタンアクションを処理するコードがあるので、ファイルの所有者をデリゲートアクションを受け取るように設定しました。それはおそらく単純な間違いなので、誰かがそれを見て、私が間違っていることを教えてもらえますか?ファイルへのリンクは次のとおりです:http://dl.dropbox.com/u/7195844/OutlineDragDrop1.zip
cocoa - nsoutlineview の nstableview グループ スタイル
nstableview のグループ行の外観が気に入っています。Apple メールでは、メールボックスや rss などのグループ セクションもそのスタイルです。
nsoutlineview のグループ行またはルート項目をそのように見せる簡単な方法はありますか? willDisplayCell メソッドをオーバーライドする必要があると思います...
cocoa - オブジェクトが NSOperations から管理対象オブジェクト コンテキストに追加されたときに NSOutlineView が更新されない
バックグラウンド
- コア データを使用する Cocoa アプリ 2 つのプロセス - デーモンとメイン UI
- デーモンが常にデータ ストアに書き込みを行っている
- UI プロセスが同じデータ ストアから読み取る
- NSTreeController にバインドされた UI の NSOutlineView の列
- NSTreeControllers managedObjectContext は、delegate.interpretedMOC のキー パスを持つアプリケーションにバインドされます。
- NSTreeControllers エンティティは TrainingGroup に設定されます (NSManagedObject サブクラスは JGTrainingGroup と呼ばれます)
私が欲しいもの
UI がアクティブになると、デーモンによって挿入された最新のデータでアウトライン ビューが更新されます。
問題
メインスレッドアプローチ
関心のあるすべてのエンティティをフェッチし、refreshObject:mergeChanges:YES を実行してそれらを反復処理します。これは問題なく動作します - アイテムは正しく更新されます。ただし、これはすべてメイン スレッドで実行されるため、更新中に UI が 10 ~ 20 秒間ロックされます。では、これらの更新をバックグラウンドで実行される NSOperations に移動しましょう。
NSOperation マルチスレッド アプローチ
refreshObject:mergeChanges: 呼び出しを NSOperation に移動するとすぐに、更新が機能しなくなります。ログ メッセージを追加すると、新しいオブジェクトが NSOperation サブクラスによって読み込まれ、更新されることは明らかです。私が何をしても、 NSOutlineView が更新されないようです。
私が試したこと
私はこれを2日間しっかりといじり、考えられるすべてを試しました。
- エンティティ名の代わりにオブジェクト ID を NSOperation に渡して更新します。
- データの更新後、アウトライン ビューの再読み込み前など、さまざまな時点で解釈された MOC をリセットします。
- NSOutlineView をサブクラス化しました。ここでおかしなことが起こった場合に備えて、サブクラスを破棄し、ビューを NSOutlineView のインスタンスに戻しました。
- NSOutlineView データをリロードする前に、rearrangeObjects 呼び出しを NSTreeController に追加しました。
- 使用していたすべての管理対象オブジェクト コンテキストで、失効間隔を 0 に設定したことを確認しました。
この問題は、メモリ内のコア データ オブジェクトのキャッシュに何らかの形で関連していると感じています。しかし、これを機能させる方法についてのアイデアはすべて使い果たしました。
なぜこれが機能しないのかについて光を当てることができる人には、永遠に感謝します.
コード
メインスレッドアプローチ
NSOperation マルチスレッド アプローチ
更新 1
この質問を見つけました。私が投稿する前にどうしてそれを見逃したのか理解できませんが、要約すると、コアデータは私がしていることを行うように設計されていません. 1 つのプロセスのみがデータ ストアを使用する必要があります。
NSManagedObjectContext および NSArrayController のリセット/リフレッシュの問題
ただし、アプリケーションの別の領域では、データ ストアを共有する 2 つのプロセスがあり、1 つのプロセスが読み取り専用アクセスを持っていますが、これは正常に機能しているように見えました。さらに、このトピックに関する私の最後の質問に対する回答のどれも、これが Core Data でサポートされていないことを述べていませんでした。
一度に 1 つのプロセスだけがデータ ストアに書き込むように、アプリを再構築します。しかし、これが私の問題を解決するかどうかはまだ懐疑的です。私には NSOutlineView の更新の問題のように見えます-オブジェクトはコンテキストで作成され、アウトラインビューがそれらを拾わないだけです。
objective-c - 重複するエンティティを表示するNSTreeControllerの提案されたソリューション
多くの人が知っているかもしれませんが、アウトラインビューにバインドされたNSTreeControllerは、コアデータエンティティを表示しているときに重複を表示できます。
一時的な解決策は、述語に'parent == nil'を追加することですが、これは親エンティティのみを返します。たとえば、ユーザーがサブエンティティを検索している場合、要求されたサブエンティティは表示されません。
(提案された)解決策は、NSTreeControllerをサブクラス化し、現在表示されているエンティティを追跡するNSMutableSet変数を追加することです。この変数は、initで割り当て、deallocで解放する必要があります。
「fetchWithRequest:merge:error:」が呼び出されたら、セットを空にする必要があります(これを解放して再度割り当てるよりも効率的かどうかはわかりません)。エンティティが表示に追加されるたびに、セットにエンティティが含まれているかどうかを確認してください。そうでない場合は、追加します。それ以外の場合は、ルートに近い方(サブエンティティ)を見つけて、そのサブエンティティの場合はスキップするか、以前に含まれていたものと交換します。
パフォーマンスへの影響は比較的少ないはずだと思います(NSSetがハッシュを使用していることを考慮して)。私が抱えている問題は、この動作を追加するためにオーバーライドする正しいメソッドを見つけることです。具体的には、「fetchWithRequest:merge:error:」が呼び出された後、NSTreeControllerがフェッチされたエンティティを処理します。
cocoa - 行ごとに異なるセル (およびデータ型) で NSOutlineView/NSTableView を実装する
Xcode 3 がビルド構成に使用しているようなアウトライン ビューをどのように実装するのか疑問に思っています。
NSOutlineView/NSTableView をバインドおよび NSTreeController/NSArrayController と共に使用する場合、明らかな理由により、ビューの列は個々のセルではなく に割り当てられたバインドを取得します。列のすべての行が同じセルを使用している場合は、簡単です。ただし、すべての行が (潜在的に) 独自のセル型を使用している場合(そして、潜在的に独自のバインディングのコレクションを使用している場合) は、おかしなことになります。
スクリーンショットを見ると、テキスト フィールド セルに必要な「値」のバインドが 1 つだけであることがはっきりとわかります。ポップアップ ボタン セルには、「content」に少なくとも 1 つ、「contentValues 」に 1 つ、最後に「 selectedIndex / selectedObject / selectedValue 」に少なくとも 1 つのバインディングが必要です。チェックボックスのセルには、" value " と (おそらく) " title "のバインドが必要です。
できるだけきれいな (そして少ない) コードでこれを達成するにはどうすればよいでしょうか?
(または、次のように尋ねられるかもしれません: Apple はどのようにそれを行ったでしょうか?)
…
[ outlineView :dataCellForTableColumn:item:]
を
介して適切な (コピーされた) セルを提供し、それらを個々のデータ モデル ([item presentedObject] から) にバインドします。アウトライン ビューに表示されるデータの正確な量 (< 500 行) を知っているので、行ごとに 1 つのセルを使用しても、メモリの問題は大きくないはずです。バインディングを介して適切に表示されるデータを取得しました(イェーイ!) が、それらの値を変更することはできません。O_o どうやら、値の変更がデータ モデルに到達することはありません。単純な[checkboxCell bind:@"value" toObject:rowModel withKeyPath:@"value" options:nil]以上のものはありますか? (これは取得するのに十分なようです値を設定しますが、それに応じて設定するためのものではありません)。
このトピックに関する情報は見つかりませんでした。カスタムセルを列ごとに使用するための情報とヒントはたくさんありますが、「行ごと」に使用するためのものはありません。:(
これは、Cocoa チュートリアルの素晴らしい内容になると思いませんか? ;)
objective-c - NSOutlineView: アイテムをドラッグするときに黄色の境界線を避けるために熱い?
NSTableView から別の NSOutlineView に行をドラッグすると、NSOutlineView に黄色のハイライト ボーダーが表示されます。どうすればそれを回避できますか?
正確に言うと、これは、行をテーブルから NSTableView の空き領域 (つまり、項目以外) にドラッグした場合にのみ発生します。ただし、NSOutlineView のアイテムに行を直接ドラッグすると、黄色の境界線は表示されませんが、(もちろん) アイテム自体が選択されます。
outlineView:validateDrop:proposedItem:proposedChildIndex:
NSOutlineViews のデータ ソースの重要な部分は次のようになります。
助けてくれてありがとう!
objective-c - プログラムでコア データ エンティティから NSOutlineView に項目を配置しますか?
これがばかげた質問のように思われる場合は申し訳ありません-私はObjective-CとCocoaに関してはアマチュアであり、コアデータの使用に関してはさらに知識がありません.
状況は次のとおりです。NSTreeController を使用して手動でいくつかの項目を既に入力した NSOutlineView があります。ここで行う必要があるのは、Core Data エンティティの 1 つでアイテムを取得し、それらを NSOutlineView の現在のコンテンツに追加することです。
明らかにこれはバインディングの能力を超えているため、プログラムで行う必要があります。私は何をすべきか?フェッチを実行してから、返されたアイテムを反復処理し、それぞれをアウトライン ビューに追加する必要があると想定しています。これは正しいです?もしそうなら、誰かがこれがどのように行われるかの例を示すことができますか?
ありがとう!