問題タブ [nsarraycontroller]
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 - NSArrayController にバインドされたテーブル列を更新します
私はココアのバインディングの世界にかなり慣れていないので、いくつかの問題を抱えています (おそらく/おそらく誤解によるものです)。
クラス Plugin のオブジェクトを含む、プラグインと呼ばれる NSMutableArray を含むシングルトンがあります。プラグイン配列にオブジェクトを追加する loadPlugins というメソッドがあります。これはいつでも呼び出すことができます。Interface Builder にインスタンスとして追加されています。
また、IB には NSObjectController があり、そのコンテンツ アウトレットはシングルトンに接続されています。contentArray が NSObjectController にバインドされている NSArrayController もあります (コントローラー キーは「selection」、モデル キー パスは「plugins」、オブジェクト クラス名は「Plugin」です)。
最後に、Plugin クラスのプロパティのキーを使用して、値が NSArrayController の ArrangeObjects にバインドされている 2 つの列を持つテーブル ビューがあります。
これまでのところ標準です(少なくともチュートリアルからわかる限り)。私の問題は、シングルトンで loadPlugins メソッドが呼び出され、プラグイン配列にオブジェクトが追加されたときに、オブジェクトを表示するためにテーブルが更新されないことです (ペン先がロードされる前に loadPlugins が呼び出されない限り)。tableView で呼び出された -reloadData は何もしません。
参照された配列が更新されたことを NSArrayController に伝える方法はありますか? loadPlugins で使用できる NSArrayController の -add: メソッドがあることは理解していますが、シングルトンをディスプレイの側面から完全に分離したいので、これは望ましくありません。
これは以下に関連しているようです: Refresh Cocoa-Binding - NSArrayController - ComboBox
「コントローラーの背後にある配列を編集する」という行は、おそらく問題を特定しているようですが、シングルトンがコントローラーを認識しないようにすることが可能になることを願っています。
前もって感謝します。
\編集...
TechZen の提案によると、バインディングは次のとおりです。
cocoa - NSArrayController にバインドされた NSTableView
Interface Builder 内に、バニラの NSArrayController にバインドされた 2 つの列を持つ NSTableView があります。NSArrayController には、アプリケーション デリゲートの NSMutableArray にバインドされた Content Array があります。さらにバインディングを使用して、バインディングによる行の追加と削除をセットアップしました (魔法です!)。
私が今直面している問題は、現在選択されている NSTableView 行を取得し、そのインデックスを使用して NSArrayControllers に関連付けられた配列に格納されているオブジェクトを検索したいということです。私が直面している問題は、NSTableView にアクセスしようとしていることです。
アプリケーション デリゲート内で次のコードを使用すると、アプリケーションがクラッシュします。
同様に、これも私のアプリケーションをクラッシュさせます:
上記のコードの単純さを考えると、私は根本的に間違ったことをしているに違いありませんか?
objective-c - Cocoa @sum配列演算子が遅すぎます-代替案?
@sumを使用するキーパスにバインドされたテキストフィールド値があります。配列コントローラーがフィルター処理されると、テキストフィールドは適切に更新されますが、非常にゆっくりと更新され、キーを押すたびにUIが遅れたり、完全にビーチボールになります(arrangedObjectsのアイテム数が減るほど少なくなります)。@sumを使用しなくても、ラグはありません。これに絞り込みました。
同じことをするより速い方法はありますか?
core-data - 無効な受信者タイプ「NSUInteger」
ヘッダー ファイルが次のような Core Data エンティティがあります。
実装ファイルは次のようになります。
今、私は次のようなコードを持っています:
「myEntityArrayController」オブジェクトは、MyEntity のすべてのエンティティを管理する NSArrayController です。このコードは正しく実行されますが、XCode は常に、コードの最後の行に対して「Invalid receiver type 'NSUInteger'」という警告を表示します。何らかの理由で、XCode はindex
メソッドが NSUInteger を返すと考えます。「objectAtIndex」はタイプ「id」のオブジェクトを返すため、なぜこれを考えるのかわかりません。
プロジェクトを数回クリーンアップしましたが、これらの警告はしばらくの間ぶらぶらしていました。任意の提案をいただければ幸いです。
cocoa - CocoaBindingsとNSArrayControllerを使用してモデルの変更を監視する
NSArrayController
モデルオブジェクトの配列を管理するコントローラーに可変配列へのバインドがあります。アレイコントローラーは私のUIにバインドされています。それはうまくいきます。
現在、コントローラークラスのモデルで値が変更されたときに手動で監視しようとしています(基本的に、変更されたモデルを後で使用するために「needsToSave」としてマークしますが、変更されたときに他にいくつかのタスクがあります)。
KVOについて読みましたが、何を観察する必要があるのか完全にはわかりません... NSArrayController?オブジェクトの配列?各モデルオブジェクト自体?錯乱。
どんなポインタも非常に役に立ちます。前もって感謝します!
cocoa - ArrangeObjects のサイズを制限するために NSArrayController をサブクラス化する
配列コントローラー内のオブジェクトの数を制限しようとしていますが、必要に応じて配列全体にアクセスできるようにしたいと考えています。私が思いついた簡単な解決策は、NSArrayController をサブクラス化し、「limitedArrangedObjects」という名前の新しいメソッドを定義することでした。このメソッドは、配置されたオブジェクトの実際のセットから限られた数のオブジェクトを返します。( NSArrayController のオブジェクト数の制限を見てきましたが、それは私の問題に対処していません。)
このプロパティをバインディング経由で監視できるようにしたいので、その上で ArrangeObjects への依存関係を設定します。
問題は、arrangedObjects が更新されたときに、limitedArrangedObjects が ArrangeObjects の値の変更を監視していないように見えることです。NSCollectionView を limitedArrangedObjects に接続しましたが、表示されるオブジェクトはありません。(代わりにそれを ArrangeObjects にバインドすると、すべてのオブジェクトが期待どおりに表示されます。)
どうしたの?
関連するコードは次のとおりです。
core-data - コアデータ アプリのポップアップで使用する、並べ替えられた一意の (重複のない) NSArrayController
属性の 1 つとして DEALNAME を持つエンティティ OBSERVATION を持つコア データ アプリがあります。Interface Builder を介して参照するか、NSArrayController にカスタム変更を加えて、並べ替えられた固有の dealnames のリストを参照して、ポップアップで使用できるようにしたいと考えています。
@distinctUnionOfSets (および @distinctUnionOfArrays) を使用しようとしましたが、適切なキー シーケンスを見つけることができません。
並べ替え記述子を指定して ArrayController を並べ替えることができますが、重複を排除する方法がわかりません。
@distinct... キーは正しい方法論ですか? IB の使用を最適化する最も簡単な方法を提供するように思われます。
重複を削除するための述語形式はありますか?
または、カスタム コントローラーを使用して特定の取引名の NSSet を抽出し、それらを配列に戻して並べ替え、IB からカスタム配列を参照する必要がありますか?
どんな助けでも大歓迎です。他の人がテーブルビューでソートされたユニークなポップアップを作成しようとしなかったことに驚いています.
cocoa - NSArrayController が NSTableView の NSMutableDictionary で動作しない
NSMutableDictionary レコードの NSMutableArrayController を使用して NSTableView にコンテンツを表示しようとしています。
私は以下に書かれた手順に従いました:
アプリケーション デリゲート クラスで、「geniuses」という名前の NSMutableArray オブジェクトを作成し、いくつかの NSMutableDictionary オブジェクトをキー「geniusName」と「domain」で保存しました。
IB で NSArrayController オブジェクトを取得し、そのコントローラー コンテンツ プロパティをアプリケーション デリゲート クラスにバインドし、そのモデル キー パスを「天才」に設定しました。属性インスペクタ ペインで、モードをクラスとして、クラス名を NSMutableDictionary として設定します。追加されたキー: 'geniusName' および 'domain' に。
IB では、テーブル ビュー オブジェクトを使用しました。content プロパティを配列コントローラーにバインドし、コントローラーのキー パスを配置されたオブジェクトとして設定します。最初の列の値プロパティを配列コントローラーにバインドし、コントローラー キー パスを配置オブジェクトとして設定し、モデル キー パスを 'geniusName' として設定します。その 2 列目の値プロパティを配列コントローラーにバインドし、コントローラー キー パスを配置オブジェクトとして設定し、モデル キー パスを 'geniusName' として設定します。
プロジェクトをビルドして実行しようとしたときにこれらの手順を実行した後、データが入力されていないテーブル ビューが見つかりました。
誰かが私が間違っているかもしれない場所を教えてもらえますか?
ありがとう、
ミラージュ
objective-c - 2つのnibファイル間でNSArrayControllerを共有するにはどうすればよいですか?
画像の配列と2つのnibファイルがあります。1つのnibファイルには、NSTableViewに画像を表示するウィンドウがあります。もう一方のペン先には、画像の配列をNSViewに描画し、選択された画像の上にハイライトを描画するウィンドウがあります。
画像の配列はNSArrayControllerによって制御されます。2つのペン先でNSArrayControllerを共有するのに問題があります。2つの別々のNSArrayControllerを同じコンテンツにバインドしますが、両方のペン先でコントローラーの選択を共有する必要もあります。つまり、テーブルウィンドウで画像を選択すると、他のウィンドウでもその画像が選択されます。
これを行うための標準的な方法はありますか?
nsarray - シンプルな NSTableView バインディングの例
バインディングを介して 2 列の NSVTableView を設定しようとしていますが、データがテーブルに表示されません。
XCode の場合:
AppDelegate に、対応する @property と @synthesize だけでなく、データを保持する NSMutableArray があります。
イベントでは、NSMutableArray で [removeAllObjects] を呼び出し、いくつかの NSDictionary オブジェクトを再設定します。各ディクショナリには、名前と値の 2 つの KVP が含まれています。
IB では:
NSArrayController を追加し、その Content Array を AppDelegate にバインドし、ModelKeyPath を AppDelegate の NSMutableArray の名前に設定しました。
NSTableView で、Content を ArrayController にバインドしました。ControllerKey = "arrangedObjects"、ModelKeyPath = empty .
2 つの列のそれぞれについて、Value を AppController にバインドし、ModelKeyPaths をそれぞれ NAME と VALUE に設定しました。ControllerKey = "ArrangedObjects".
アプリのデリゲートで NSArray を使用したり、値を更新する必要があるたびに新しいものを作成したりするなど、他にもいくつか試しました。私が忘れている小さな何かがあるに違いありません。それは何ですか?
ヨルジ