問題タブ [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.
cocoa - Cocoa バインディングの問題。バインドされたテーブルの列にデータが表示されず、コンソールにエラーが表示されない
Cocoa プロジェクトを手動で同期されたインターフェイス モデルからバインディング モデルに変換するのに問題があるため、インターフェイスのグルー コードについて心配する必要はありません。
CocoaDevCentral Cocoa Bindings チュートリアルに従って、すべての基本をカバーしていることを確認しましたが、正しく動作しません。マスター/ディテール インターフェースを使用していますが、インターフェースのマスター部分を正しく動作させることさえできません。チュートリアルに示されている方法と同様のバインディング モデルを設定したにもかかわらず、マスター カラムにデータが表示されません。すべてのコントローラーとオブジェクトが-(id)key
、-(void)setKey:(id)key
メソッドをバインドに準拠するように変更し、nib に ControllerAlias オブジェクトを作成し、それをコントローラーに接続し、ControllerAlias が接続するクラスの NSMutableArrays の 1 つにバインドする NSArrayController を作成しました。配列内に含まれるオブジェクトの型を調べてから、テーブルの列を NSArrayController にバインドしました。
コンソールにエラーNSBindingDebugLogLevel
はまったく表示されず、1 に設定してもエラーは発生しません。これは、問題が何であるかを理解するのに役立ちます。
物事が正しく機能していることを確認するために私が考えることができる唯一のことは、NSArrayController に接続する NSMutableArray に実際に何かが含まれていることを確認することです。
助言がありますか?Cocoa バインディングには他に、チェックすべき典型的な落とし穴はありますか?
objective-c - 複数の XIB から 1 つの NSArrayController を使用する
1 つの NSArrayController の内容を異なる XIB で定義された 2 つのウィンドウに表示する際に問題が発生しています。
私のメイン ウィンドウ (MainMenu.xib) には、NSArrayController にバインドされた NSTableView があります。
2 番目の XIB には、NSTableView を含む別のウィンドウがあります。新しい NSArrayController を作成し、テーブルをその NSArrayController の内容にバインドしました。
両方の NSArrayController は、まったく同じ NSArray にバインドされています。
最初はすべて問題ありませんが、問題は、メイン ウィンドウで NSArrayController を使用してオブジェクトを配列に追加すると、セカンダリ ウィンドウのデータ ビューが更新されないことです。これは、新しいオブジェクトの追加に NSArrayController が使用されていないため、自分自身を更新する必要があることを認識していないことが原因である可能性が最も高いです。
私がやりたいことは、両方のウィンドウで NSArrayController のまったく同じインスタンスを使用することです。このようにして、オブジェクトが配列に追加されると、両方のビューに変更が通知されます。
問題は、Interface Builder でこれを行う方法がわからないことです。NSArrayController を別の NSArrayController にバインドできません (NSArray にしかバインドできないことを示す実行時エラーが発生します)。NSArrayController を File's Owner の NSArrayController メンバーに接続しても、使用したい NSArrayController が消去されるだけなので、どちらも役に立ちません。
コードでバインディングを自分でセットアップすることもできると思いますが、可能であれば Interface Builder を使用する方がよいようです。Interface Builderでこれを行う方法はありますか、またはこれをすべて一緒に設定するより良い方法はありますか?
更新: Chuck の回答とコメントに応えて、次のことを試しました。 : 認識されないセレクターがインスタンスに送信されました") - テーブルの各列を、arrayController.arrangedObjects.propertyName のモデル キー パスを使用してファイルの所有者にバインドします。
これでも、テーブルの内容が更新されることはありませんでした。これは、NSArrayController 自体ではなく、NSArrayController の ArrangeObjects にバインドしているためだと思います。しかし、NSArrayController に直接バインドすると、エラーが発生します。
通常、「Bind to」ComboBox から NSArrayController を選択し、arrangedObjects をコントローラー キーとして使用し、プロパティ自体をモデル キー パスとして使用します。この場合、それと同等のことを行う方法がわかりません-できれば。
上記のプロセスで何か間違ったことをしましたか?
cocoa - CoreData-Entities からコードにいくつかの値を取得する方法
CoreData アプリで、いくつかの属性を持つエンティティを作成しました。テーブルビューとバインドされた NSArrayController を想像してください。両方を使用して、エンティティの「インスタンス」を作成 (および編集) します。私の質問は、これらの属性の値をコードに取得する方法です。さらに質問がある場合: http://twitter.com/xP_ablo
macos - NSArrayController によって制御される NSTableView からすべての項目を削除するにはどうすればよいですか?
私はNSArrayController
, NSMutableArray
andを使用してNSTableView
、独自のカスタム オブジェクトのリストを表示しています (ただし、バニラNSString
オブジェクトのリストだけを表示している場合でも、この質問はおそらく当てはまります)。
さまざまな時点で、配列をクリアし、データ ソースからデータを更新する必要があります。removeAllObjects
ただし、オブジェクトを呼び出すだけでNSMutableArray
は KVO の更新がトリガーされないため、画面上のリストは変更されません。
NSArrayController
利用可能なメソッドがありません removeAllObjects
。これは本当に奇妙に思えます。(これaddObject
を使用してオブジェクトを追加し、KVO が確実にトリガーされ、UI が更新されるようにします。)
これを正しく発生させることができた最もクリーンな方法は次のとおりです。
...そのため、KVO 通知を自分で手動で行う必要があります (これは、前述のように、myArray
プロパティを含むテスト アプリ クラスにあります)。NSMutableArray
これは間違っているようです - もっと良い方法はありますか? removeAllObjects
私のグーグル検索から、 inの欠如に混乱している人が何人かいるようですが、NSArrayController
より良い解決策は見られませんでした。
私はこの解決策を見てきました:
しかし、これは私にはさらに不快に見えます。少なくとも私の解決策は、少なくともわずかに自己文書化しています。
NSArrayController
Apple は、オブジェクトを介して管理されているリスト コントロールを空にしたい場合があることに気付かなかったのですか? これは当たり前のように思えるので、何かが欠けているに違いないと思います...
余談ですが、もちろん、( 経由でNSArrayController
) 配列に新しい項目を追加すると、 で KVO 更新がトリガーされますがNSArrayController/NSTableView
、
- 何もないので、リストにアイテムを入れないことがあります。だからあなたはただ古いアイテムを見るだけです。
- これはとにかくヤバい。
cocoa - アレイコントローラーの特定のアイテムにバインドするCocoa
の値を配列内の特定のアイテムにNSArrayController
バインドするためにを使用することは可能ですか?NSTextField
特に、配列の最初の項目のプロパティにバインドし、配列が空の場合は何も表示しないようにします。
shows just "("を使用arrangedObjects.command
すると、アイテムごとにカンマ区切りの文字列を含む複数行の文字列を表示しようとしている可能性があります。最初の文字列が必要です。
cocoa - CocoaのBindingsを使用して、編集可能なNSTableViewをNSMutableArrayに接続することは可能ですか?
私がこすり合わせることができる断片から、これに対する答えは「いいえ」になるように思われるので、私が打ち込もうとしている(おそらく)場合に私が達成しようとしていることを大まかに説明しますネジ。
私のアプリにあるのは、読み込むことができる有効なファイル拡張子のリストです。これは、ディレクトリを介して繰り返し使用されます。これを好みにしたいので、次のようにします。
そして、NSTableViewをSharedUserDefaultsコントローラーにバインドされているNSArrayControllerにバインドしています...
これは、ユーザーがカスタマイズ可能な有効な拡張機能のリストを作成するための完全に間違ったアプローチですか?NSUserDefaultsの役割を誤解しましたか?
cocoa - 複数のキーパスを組み合わせたバインディングを持つことは可能ですか?
数量値を持つオブジェクトがあるとします。
また、これらのオブジェクトの配列を保持する配列コントローラーがあります。
さらに、合計の割合の列 (つまり、すべての行の数量の合計に対する特定の行の数量の割合) を持つテーブルがあり、バインディングを介して適切な値を入力する必要があります。
これを行う方法としては、この列を arrayController.arrangedObjects.@sum.quantity を arrayController.arrangedObjects.quantity で割った値にバインドすることが考えられます。
これを行うことは可能ですか?
そうでない場合、これと同じ目的を達成するための代替手段を提案できますか?
objective-c - NSArrayController が永続ストアからのコンテンツのロードを完了したことを伝える正しい方法は何ですか?
コア データ ストアにバインドされているアレイ コントローラーがコンテンツの読み込みを完了したことを知る最善の方法は何ですか?
コンテンツを持つ配列コントローラーに依存するいくつかのメソッド (つまり、awakeFromNib) がありますが、ほとんどの場合、そのオブジェクトで awakeFromNib が呼び出されているとき、配列コントローラーにはまだコンテンツがありません。
コントローラーにすべてのコンテンツが含まれていることを確認するまで、アクションを遅らせたいと考えています。