問題タブ [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.
macos - NSOutlineView 選択バインディング エラー
次の状況になりました: NSOutlineView <-> NSTreeController <-> MyClass
NSTreeController を MyClass のオブジェクトの配列にバインドします。選択した項目を NSOutlineView から取得したいと考えています。このために、私はNSMutableIndexSetを宣言し、NSOutlineViewにバインドする方法をバインドする「選択インデックスパス」を介してNSTreeControllerにバインドします。
行が選択されるたびにインデックスの説明をログに記録すると、出力は次のようになります。「 1 インデックス [3, 1]」
では、実際にこのインデックスの値を取得するにはどうすればよいでしょうか? 私が試してみると:
たとえば、「-[NSCFArray firstIndex]: 認識されないセレクターがインスタンスに送信されました」というメッセージが表示されます。
ありがとう
objective-c - NSTreeController/NSOutlineViewを使用して子オブジェクトを追加する
私のアプリケーションには、多くのMacアプリケーションと同様に、ソースリストがあります。現時点では、これはNSTreeControllerにバインドされたNSOutlineViewです。非常に簡単にアイテムを追加でき、灰色のすべて大文字のヘッダーなどを使用して、「ソースリスト」の外観を複製することもできます。しかし、私を回避する何かがあり、それは私をばかげている。
ツリー内の特定のアイテムに子を追加するにはどうすればよいですか?たとえば、「チーズ」というタイトルのアイテムを作成したとします。「チェダー」と「スイス」という2人の子供をチーズに追加しました。最初の追加メソッドの実行が終了したので、子のリストに「LonghornColby」を追加するにはどうすればよいですか。
私はそれをグーグルで検索しましたが、単純で直接的な答えを見つけることができません。しかし、私が見ることができることから、それは不必要に複雑であり、朝食を食べるのと同じくらい簡単なことをするために議会の行為を要求することに似ています。私が間違っている場合は訂正してください。
アップデート:
サブタイプを使用しているとは思わない。これまで、これまで私がツリーにデータを入力してきた方法は次のとおりです。
「isSourceGroup」ビットは、このアイテムがアウトラインビューのヘッダーの1つであることを示すために使用されます。
multithreading - UIアクションにバックグラウンドスレッドを使用する必要がありますか?
バックグラウンド
NSOutlineView
TrainingGroupエンティティを表示するがあります。各TrainingGroupは、ローカルマシン上のフォルダーを表します。
は、
NSOutlineView
フェッチNSTreeController
述語がIsTrained == 0
各TrainingGroupはプロジェクトに割り当てることができます。
各TrainingGroupには、そのファイルでの作業時間を示す多くのTrainingEntriesがあります。
TrainingGroupがプロジェクトに割り当てられると、
IsTrained
はに設定されYES
ます。プロジェクトに割り当てると、すべての子孫もそのプロジェクトに割り当てられ、それらの
IsTrained
プロパティもに設定されYES
ます。プロジェクト列は
projectTopLevel
プロパティにバインドされています。
例
ツリー全体は次のようになります。
そして、NSOutlineViewはこれだけを見るでしょう:
ムービーをパーソナルに割り当てた場合、ビューは次のようになります。
コード
TrainingGroup.m
問題
上記のように、現在、メインスレッドですべてのプロジェクト割り当てコードを実行しています。
各フォルダの下に何百もの時間エントリがあると、アプリが応答しなくなります。
可能な解決策
1モーダルプログレスバー
アプローチ
- 別のコンテキストでバックグラウンドスレッドでプロジェクト割り当てを実行します。
- 終了したら、標準のCoreDataマージをメインコンテキストに使用します。
- モーダルシートは、プロジェクトの割り当てが完了するまで、それ以降のアクティビティをブロックします。
いいもの
- ユーザーは、何が起こっているかについて即座にフィードバックを受け取ります。
- アプリは応答性を維持します。
悪い人
- 現在の割り当てが完了するまで、ユーザーは何もできません。
2非モーダルスピナー
アプローチ
- 別のコンテキストでバックグラウンドスレッドでプロジェクト割り当てを実行します。
- 終了したら、標準のCoreDataマージをメインコンテキストに使用します。
- トレーニンググループの横に進行状況スピナーを表示し、忙しいことを示します。
- 割り当てが完了すると、トレーニンググループがビューから消えます。
いいもの
- ユーザーは、最後のアクションが処理されている間に他のことを行うことができます
- アプリは応答性を維持します。ちょっと。下記参照。
悪い人
- テストでは、バックグラウンドコンテキストがメインコンテキストにマージされると、最大3秒のフリーズが発生しました。
- ユーザーが何か他のことをしている最中にビューが更新される可能性があり、これは煩わしいかもしれません。
- 元に戻すは実装が難しいでしょう。
3非表示
アプローチ
- 上記。ただし、トレーニンググループは割り当て時に削除され、割り当てが完了するまで「進行中」に設定されます。
良い点と悪い点
- 上記と同じですが、トレーニンググループの順序が予測可能である点が異なります。
- メインコンテキストにマージして戻すと、まだ大幅にフリーズします。
4パフォーマンスを向上させる
アプローチ
- コードをそのままにして、メインスレッドで実行します。
- パフォーマンスを向上させて、何千ものエントリがあっても、ビューが最大0.5秒だけフリーズするようにします
いいもの
- アプリは応答性を維持します。
- 元に戻すのは簡単です。
- アーキテクチャはシンプルなままです。
悪い人
- 私が理解しているように、Appleの推奨に反して、メインスレッドで集中的な処理を行うべきではありません
- 十分なパフォーマンスを得ることができますか?わからない。
私の質問
私が見る限り、上記のオプションはどれも理想的ではありません。
1.最適なオプションはどれですか?
2.他にオプションはありますか?
3.自分のアプローチについて何を改善できますか?
cocoa - Mail.appのような未読メッセージのバッジが付いたNSOutlineView
iTunesのソースリストやMail.appメールボックスリストに似たユーザーインターフェイスを作成しようとしています。このリストでは、要素の右側に番号付きのバッジ(未読メール、新しいポッドキャストなど)が表示されます。
AppleのSourceListの例に基づいてNSOutlineView
、いくつかのグループと各グループのいくつかのアイテムを表示するように設定しました。
各エントリの番号で「バッジ」を表す標準のUI要素はありますか?ドキュメントに何も見つかりませんでした。自分で絵を描いたり、伸ばしNSTextFieldCell
たりしなければならないのではないかと思います。
これを行う方法の例はありますか?
cocoa - 項目を展開するときに NSOutlineView でアサーション エラーが発生する
データ モデルに問題があるようで、アイテムを展開するときにこのエラーが時々発生します。この主張が何を意味するのか、誰にも分かりますか?
2010-10-20 03:04:47.547 test_tree[60332:613] * -NSOutlineView _expandItemEntry:expandChildren:startLevel: でのアサーションの失敗:、/SourceCache/AppKit/AppKit-949.54/TableView.subproj/NSOutlineView.m:1003 2010-10 -20 03:04:47.548 test_tree[60332:613] 満たさない無効なパラメーター: itemEntry->children == NULL
objective-c - NSOutlineViewを実装してplistファイルの内容を編集する
私はcocos2d-iphoneを使用してゲームを書いていますが、ステージは.plistファイルで定義されています。ただし、ファイルは大きくなっています。そのため、プロセスに構造を追加し、plistのほとんどを固定フィールドに分割するエディターを開発しました。ただし、一部の要素には引き続きplistエディタータイプの機能が必要なため、「その他のパラメーター」を表示するパネルにNSOutlineViewを実装しました。XCodeの「プロパティリストエディタ」から機能を複製しようとしています。
私は次のシステムを実装しました。http://www.stupendous.net/archives/2009/01/11/nsoutlineview-example/
これは私が必要としているものに非常に近いですが、私が今日のほとんどを解決しようとして費やしてきた問題があります。キー列の値は、親ディクショナリを検索して使用することにより、選択したアイテムから「逆方向」に計算されます。
ただし、ツリー内の特定のディクショナリ内に同じ値を持つ複数のアイテムがある場合、このステートメントは常にその値を持つ最初のアイテムを返します(isEqualToString:またはハッシュ値を使用して文字列を比較しているように見えます)。これにより、item1、item2、item3の代わりに'item1、item1、item1'を示すキー列が表示されます(項目1〜3はすべて値''を持ちます)。次に試しました。
ただし、これは常にnilを返します。NSOutlineViewの経験が少し多い人が、より良いソリューションを提供できるかもしれないと期待していました。この問題はリンクされた例では1回しか発生しませんが、たとえば辞書からアイテムを削除する場合は、これを何度も使用する必要がありました。どんな助けでも大歓迎です。
cocoa - NSOutlineViewのスクロールを検出する方法は?
2つのNSOutlineViewを並べて表示すると、同じ数の行が含まれます(これは前提条件です)。ユーザーがマウス、キーボード、またはスクロールバーを使用してスクロールするときに同期して、同じビュー部分(または複数の行)が表示されるようにする必要があります。
私はココアの土地の初心者ですが、これをどのように達成できるかわかりません
cocoa - コアデータを含むソースリストとしての NSOutlineView
Finder にあるようなソース リストを必要とするアプリに取り組んでいます。これまでのところ、Core Data を で動作させることができましたNSOutlineView
が、グループの見出しはソース リストのようには見えません。実際のソース リスト グループの見出しは のように見え、標準化された
NSOutlineView
ものは のようになります。大きな違いは、テキストの色と大文字だけのようです。グループ見出しのみの色を変更することは可能ですか、それとも使用できるソース リストの見出し「テーマ」はありますか?
objective-c - NSOutlineViewの列に動的にデータを入力する方法は?
NSOutlineViewへのIBOutletがあり、既存の列を削除して新しい列を追加したいと思います。
列を追加するためにこれを試しました
と
運がない。
削除するには、これを試しました:
何か助けはありますか?
ありがとう!
cocoa - NSOutlineViewとNSTreeControllerは何千ものオブジェクトを処理できますか?
バックグラウンド
GCを使用したSnowLeopard10.6.4のCoreDataアプリ
バインディングを使用してNSTreeControllerに裏打ちされたNSOutlineViewがあります
私はバックグラウンドのNSOperationサブクラスに数十のオブジェクトを作成し、保存
mergeChangesFromContextDidSaveNotification
してメインコンテキストにマージするために使用しています。これらはすべて、Appleドキュメントで推奨されています。メインコンテキストには何千ものオブジェクトがあります
問題
パフォーマンスの問題がたくさんありました。マージに数秒かかることがあり、UIがロックされます。また、かなり多くのメモリを使用しているようです。
私は最近、他の人もこの問題を抱えていることを発見しました。これは、バインディングとのNSTreeController/NSOutlineViewの組み合わせの制限であると私は考え始めています。
質問
NSOutlineViewとNSTreeControllerは何千ものオブジェクトを効率的に処理できますか?
この投稿は、これがrdar://7139579を引用する10.6.2の問題であることを示唆しているように見えました。これが「修正」されたかどうか誰かが知っていますか?
何か提案をいただければ幸いです。