問題タブ [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 - NSManagedObjectContext および NSArrayController のリセット/リフレッシュの問題
UI に (別のプロセスによって行われた) 外部の変更を sqlite データ ストアに反映させるのに問題があります。
私はかなり標準的なコア データ ベースの NSArrayController / テーブル ビューを持っています。私のアプリは、データに外部変更が加えられたという通知を受け取ります。
問題は、これを行うとテーブルからすべてのデータが消去されることです。配列コントローラの ArrangeObjects も空です。その後のことを考えた
役立つかもしれませんが、そうではありません。managedObjectContext でフェッチ要求を実行すると、データが存在し、更新されていることが示されるため、managedObjectContext は変更を認識します。
リセットから「回復」する方法についての手がかりはありますか? または、リセットのアプローチが完全に間違っている可能性があります。その場合、外部の変更をロードするためのより良い方法はありますか?
objective-c - NSArrayController でオブジェクトを削除する
NSTableView
からデータを取得する がありNSArrayController
、現在選択されている行を削除する必要があります。メソッドがあることは知っNSManagedObjectContext
てdeleteObject:
いますが、から削除する方法が思いつきませんNSArrayController
。
cocoa - NSArrayController と KVO
基になる配列を更新するメソッドが呼び出されたときに、NSArrayController にバインドされた tableView を更新するにはどうすればよいですか? 例はこれを明確にするかもしれません。
アプリケーションが起動すると、SubwayTrain が作成されます。SubwayTrain が初期化されると、単一の SubwayCar が作成されます。SubwayCar には可変配列「passengers」があります。地下鉄の車両が初期化されると、乗客の配列が作成され、いくつかの People オブジェクトが配置されます (「切符売り場」という名前の人と「ホームレスの男性」という名前の別の人を考えてみましょう)。これらの人は常に SubwayCar に乗っているので、初期化時にそれらを作成し、乗客配列に追加します。
アプリケーションの存続期間中、人々は車に乗り込みます。「addPassenger」は SubwayCar で呼び出され、人が引数として渡されます。
私は、subwayTrain.subwayCar.passengers にバインドされた NSArrayController を持っており、起動時に私のチケット コレクターとホームレスの男性が正常に表示されます。しかし、[subwayCar addPassenger:] を使用すると、tableView が更新されません。乗客が確実に配列に追加されていることを確認しましたが、GUI では何も更新されません。
私は何を間違っている可能性がありますか?私の本能は、それがKVOに関連しているということです-配列コントローラーは、addPassengerが呼び出されたときに更新することを知りません(addPassengerが[passengers addObject:]を呼び出しても)。
喜んで手伝ってくれる人に感謝します。
アップデート
したがって、addPassenger メソッドを
に
これは、[self setSeatedPlayers] を使用しているためだと思います。これは正しい方法ですか?配列をコピーし、古い配列を解放し、コピーを更新するのは (既存の配列に追加するだけではなく) 非常に面倒に思えます。
cocoa - NSTreeController の問題にバインドされた NSArrayController "Content set"
NSTreeController と CoreData データモデルにバインドされた NSOutlineView があります。NSOutlineView は彼のデータを適切に表示します。
NSTableView のセル値が NSArrayController にバインドされ、CoreData からのデータが表示されます。NSTableview も彼のデータを適切に表示します。
Datamodel には、NSOutlineView と NSTableView のデータ間に関係があります
NSArrayController の「コンテンツ セット」を NSTreeController.selection.name にバインドして、NSOutlineView の選択に関連するすべての項目を表示しようとすると、次のエラーが発生します。
クラス NSCFString の無題のオブジェクトから NSSet を作成できません (「無題」は NSOutlineViews ノードの値です)
また、NSTableView のデータは表示されません。
IB でのすべてのセットアップ - これを機能させるためのヒントはありますか?
どうもありがとう!
cocoa - 配列から単一のオブジェクトにバインドするCocoa
私は以前、この質問を関連するスレッドにコメントとして投稿し、簡単だと思っていました。そのスレッドはここにあります:
アレイ コントローラ内の特定の項目への Cocoa バインディング
質問は、objective-c とココアを試して学習するために構築しているゲームに関連しています (ここで詳しく説明します)。テキサス ホールデム ポーカーのように考えれば十分です。1 つのサーバーがゲーム情報を保持し、可変数のクライアント (常に複数) からの入力を管理します。ココア バインディングを介して、IB の配列コントローラーを使用して、サーバー上の配列に格納されているゲームの公開情報を各プレイヤーに表示します。テーブル上の 5 枚のカードがサーバー上の NSArray に格納され、各クライアントの NSArrayController の content フィールドにバインドされていると考えてください。
この部分は、魔法のようにうまく機能します。ただし、各プレイヤーは非公開にする必要がある 2 枚のカードを持っています。各クライアントは、その特定のプレーヤーに配られたものに応じて、異なるカードを表示する必要があります。(実際に起こっているのは、プレイヤー オブジェクトの配列にバインドしているためです。
すべてのカードが同じアレイに格納されていると想像してください)。だから私の質問は、配列コントローラーから単一のオブジェクトへのバインディングをどのように設定するのですか (または、他のコントローラーが必要ですか)? つまり、Players 配列の 1 人のプレーヤーにバインドするにはどうすればよいでしょうか?」
objective-c - バインディングで何か間違ったことをしていると、何がわからない
モデルオブジェクトのインスタンスを保持する可変配列があります。そのモデルオブジェクトには、「名前」といういくつかのプロパティがあります。可変配列の初期化または入力に問題はありません。
引き出し付きの窓があります。ドロワーにテーブルを追加しました。ドロワーはテーブルを使用してモデルオブジェクトのいくつかのインスタンスを表示するという考えです。
ドロワーのあるウィンドウのxibにnsarraycontrollerを追加しました。Array Controllerのプロパティで、ObjectControllerをモデルクラスのインスタンスに設定しました。アレイコントローラーバインディングで、ファイル所有者を指すようにコントローラーコンテンツを設定し、モデルキーパスをアレイの名前に設定しました。
テーブルでは、コンテンツをアレイコントローラーにバインドし、コントローラーキーをarrangedObjectsにバインドし、モデルキーパスを名前にバインドします。
私の問題は、可変配列が適切に初期化されて入力されているにもかかわらず、ドロワーのテーブルに1つのエントリが表示されないことです。ここで何かが足りませんか?
objective-c - nsarraycontrollerからモデルオブジェクトを取得するのにどれくらいの費用がかかりますか?
テーブルのある窓があります。この表には、いくつかのモデルオブジェクトが名前でリストされています。これらのモデルオブジェクトはウィンドウをバックアップし、そのウィンドウのコンポーネントはすべて、値をモデルオブジェクトに依存します。
そのウィンドウの一部のテーブルはモデルオブジェクトにバインドできないため、データソースを使用してデータを入力する必要があります。この状況では、現在選択されているオブジェクトを配列コントローラーから取得し(ユーザーがモデルオブジェクトを一覧表示するテーブルをクリックしたために選択されました)、手動で操作します。
私の質問は、必要になるたびに配列からモデルオブジェクトを取得するのにどれくらいの費用がかかるかということです。タイプモデルオブジェクトのグローバル変数を作成し、ユーザーがそのテーブルをクリックするたびに設定する必要がありますか、それとも必要になるたびに配列コントローラーから値を取得しても大丈夫ですか?
cocoa - NSArrayController の作成、変更、および新しいオブジェクトの選択
私の NSPersistentDocument ベースのアプリケーションのメイン ビューは、レコードのリストを表示する (NSArrayController にバインドされた) テーブル ビューで、その下に [レコードの追加] ボタンがあります。ボタンが次の(おそらく些細な)動作を引き起こすようにしたい。
- 新しいオブジェクトを作成する
- 新しいオブジェクトにいくつかのデフォルトを設定します (メイン ドキュメントに保存され、グローバルには使用できません)。
- テーブル ビューに追加します。
私が試した、または却下したことは次のとおりです。
- NSArrayController の「追加」アクションを使用します - 問題: 新しいオブジェクトが返されず、実装が延期されるため、新しく作成されたオブジェクトを変更することはできません
- データ クラスの init をオーバーライドします - 機能しません - ドキュメント クラス インスタンスに格納されているデータにアクセスする必要があります
- ドキュメントに保存されているデータにアクセスする必要があるため、NSArrayController をサブクラス化し、"newObject" をオーバーライドしても機能しません。
次のコードは「ほぼ」機能しました:
/li>
このコードは、保存されていないドキュメントに対して実際にうまく機能します。しかし、ドキュメントを保存して再度開くと、追加ボタンをクリックすると、新しいレコードがテーブルに 2 回表示されます。明らかに、「addObject」は冗長ですが (保存されていないドキュメントでは正常に機能しますが)、それがないと新しいオブジェクトは選択されません。
cocoa - プログラムで NSArrayController の ObjectClass を設定する方法
私は非常に単純なものであるべきであるという問題を抱えています。NSArrayController を作成し、それが管理するクラスを指定したいと考えています。問題は、setObjectClass メソッドで Class を指定する正しい方法がわからないことです。私は次のことをしたい:
SKHProject は、実装ファイルにインポートしたクラスです。「'SKHProject' の前に式が必要です」というエラーが表示され続けますが、正しい式がわかりません。どこが間違っていますか?