問題タブ [key-value-observing]

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.

0 投票する
1 に答える
717 参照

cocoa - NSTreeControllerKVOの問題

NSArrayControllerサブクラスの「items」(カスタム)プロパティに配列がバインドされているNSTreeControllerがあります。ツリーコントローラーはNSArrayControllerの選択にバインドされていないため、アレイコントローラーの選択が変更された後にアイテムをフェッチする必要があることをツリーコントローラーに通知する必要があります。

NSArrayControllerのサブクラスで次のことを行いました。

これで十分なAFAIKになるはずです。クラスメソッドが呼び出されますが、効果がないようです。

オブザーバーを実装すると、正常にselectedObjects機能します。

どんな手掛かり?

0 投票する
1 に答える
6815 参照

iphone - iPhone - クラス ... のインスタンスが割り当て解除されていますが、キー値の監視がまだ登録されています

NavigationController のために、プッシュされる ViewController (MKMapView を使用) があります。したがって、「戻る」ボタンのある NavBar があります。その戻るボタンをクリックすると、エラーが発生します。

2010-01-11 18:05:35.273 TestApp[147:207] クラス MKUserLocation のインスタンス 0x1758f0 の割り当てが解除されていますが、キー値オブザーバーがまだ登録されています。観測情報が漏洩しており、誤って他の天体にくっついてしまう可能性さえあります。NSKVODeallocateBreak にブレークポイントを設定して、デバッガーでここで停止します。現在の観測情報は次のとおりです: (コンテキスト: 0x0、プロパティ: 0x17d600>) プログラムは信号を受信しました: 「EXC_BAD_ACCESS」。

Observer で実装された viewDidLoad メソッドがあります。

}

私の解放:

ここで何が問題なのか誰か教えてもらえますか? NavBar の [戻る] ボタンをクリックすると、dealloc メソッドに入り、上位の ViewController に戻り、このエラーがスローされます。

よろしくお願いします。

0 投票する
2 に答える
954 参照

objective-c - Cocoa で KVO/Binding をデバッグするためのツール

「gdb info gc-roots」の精神で、特定のオブジェクトの現在のオブザーバーをログに記録するツールはありますか? 「gdb info gc-references」は、本来の目的の副産物として(一種の)それを行うことができることがわかりましたが、ガベージコレクションされていないアプリでは機能しません。ありがとう!

0 投票する
5 に答える
8325 参照

javascript - Javascript オブジェクトのキー値のコーディング。ネストされた値を動的に設定する

オブジェクトを使用して基本的なキー値のコーディングを行うことができる小さなライブラリに取り組んでいます。次のオブジェクトがあるとします。

そして、次の JavaScript 関数があります。

そして使用中:

これは機能しますが、を使用せずに上記を達成したいと思いevalます。これは可能ですか、それともeval最善の方法ですか?

編集:

少なくともパスの深さ-1については、設定している値が存在すると想定できることに注意してください。既存のオブジェクトの値の設定についてもっと心配しています。

0 投票する
5 に答える
2991 参照

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] を使用しているためだと思います。これは正しい方法ですか?配列をコピーし、古い配列を解放し、コピーを更新するのは (既存の配列に追加するだけではなく) 非常に面倒に思えます。

0 投票する
4 に答える
1098 参照

cocoa - 配列から単一のオブジェクトにバインドするCocoa

私は以前、この質問を関連するスレッドにコメントとして投稿し、簡単だと思っていました。そのスレッドはここにあります:

アレイ コントローラ内の特定の項目への Cocoa バインディング

質問は、objective-c とココアを試して学習するために構築しているゲームに関連しています (ここで詳しく説明します)。テキサス ホールデム ポーカーのように考えれば十分です。1 つのサーバーがゲーム情報を保持し、可変数のクライアント (常に複数) からの入力を管理します。ココア バインディングを介して、IB の配列コントローラーを使用して、サーバー上の配列に格納されているゲームの公開情報を各プレイヤーに表示します。テーブル上の 5 枚のカードがサーバー上の NSArray に格納され、各クライアントの NSArrayController の content フィールドにバインドされていると考えてください。

この部分は、魔法のようにうまく機能します。ただし、各プレイヤーは非公開にする必要がある 2 枚のカードを持っています。各クライアントは、その特定のプレーヤーに配られたものに応じて、異なるカードを表示する必要があります。(実際に起こっているのは、プレイヤー オブジェクトの配列にバインドしているためです。

すべてのカードが同じアレイに格納されていると想像してください)。だから私の質問は、配列コントローラーから単一のオブジェクトへのバインディングをどのように設定するのですか (または、他のコントローラーが必要ですか)? つまり、Players 配列の 1 人のプレーヤーにバインドするにはどうすればよいでしょうか?」

0 投票する
3 に答える
2103 参照

objective-c - KVCを介したコレクションへのアクセス(コレクションを保護し、KVOに準拠するため)

Foosの配列を持つクラスTestがあります。ivarを直接公開せずにFoosへのアクセスを提供したいと思います。私はこのKVCを準拠させようとしています(KVO準拠への道を開くためでもあります)。私は持っています:

Test.h

Test.m

クライアントがFooを追加しようとすると、これは無限ループに入ります。

私は何が間違っているのですか?

0 投票する
2 に答える
1185 参照

objective-c - オブザーバーとしての自己を削除するとクラッシュする - CALayer

-(void)dealloc でオブザーバーとして自分自身を削除すると、CALayer サブクラスでクラッシュが発生します。

例外がスローされます。self がオブザーバーとして追加されていないことを示しています。これは、[CATransaction フラッシュ] が呼び出された後、特定のケースでのみ発生します。

Instruments を使用して、オブジェクトがいつ割り当てられたかを確認しました。CALayerGetPresentationLayer() の呼び出しで割り当てられたことが示されています。これがどのように機能するかはわかりませんが、これは元のレイヤーのコピーであると思われるため、init が呼び出されることはなく、オブザーバーとして追加されることもありませんでした。

自分自身を削除する前に自分がオブザーバーであることを確認する方法、または自分がプレゼンテーション層であるかどうかを確認するにはどうすればよいですか?

ブリッジャー・マクスウェル

0 投票する
1 に答える
1037 参照

iphone - Objective-CのKey-Valueの観察

これは機能していないようです。

このコードが移動するクラスは、sessionControllerを認識しており、currentSessionにアクセスできます。currentSessionのsessionState変数は、私が観察したいものです。私がここで行った方法で観察されるオブジェクトを設定することは冗長ですか?

もしそうなら、それを行う方法は何ですか?監視オブジェクトにcurrentSession変数を与えることはできません。

0 投票する
2 に答える
457 参照

cocoa - これは、変更可能な多対多の関係をモデル化するための KVO 準拠の優れた方法ですか?

可変で順序付けされていない対多の関係が必要だとします。内部最適化の理由から、これはNSMutableDictionaryではなくに格納することをお勧めしますNSMutableSet。しかし、その実装の詳細は非公開にしたいと思います。

また、KVO 準拠のアクセサーをいくつか提供したいと思います。

さて、ディクショナリにもアクセサ (もちろん、私の実装ファイルではプライベートなもの) を提供することは便利であり、それほど害はありません。

これは私には良さそうです!アクセサーを使用しkeyedThingsてクラス内で自分をいじることができますが、他のオブジェクトは、可変で順序付けられていない (キーなし!) 対多の関係を扱っていると考えています。

私がやっていることのいくつかは「悪」かもしれないと心配している. 私はここで何か悪いことをしましたか?(たとえば、プロパティは変更可能であると想定されているためsetThings、を提供しないのは間違っていますか?)things