問題タブ [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 投票する
4 に答える
16363 参照

objective-c - いつオブザーバーを削除する必要がありますか? オブザーバーを削除する前のオブジェクトの割り当て解除に関するエラー

クラスの 1 つでキー値監視を使用しようとしています。init メソッドでオブザーバーを登録し、dealloc でそれらを削除/登録解除しましたが、デバッグ プリントによると、dealloc メソッドが呼び出される前に次のエラーが発生したようです。

クラス TekkPoint のインスタンス 0x583870 の割り当てが解除されていますが、キー値オブザーバーがまだ登録されています。観測情報が漏洩しており、誤って別の天体にくっついてしまう可能性さえあります。NSKVODeallocateBreak にブレークポイントを設定して、デバッガーでここで停止します。現在の観測情報は次のとおりです: (コンテキスト: 0x0、プロパティ: 0x536400> コンテキスト: 0x0、プロパティ: 0x55aba0> )

オブザーバーを削除する特定の方法はありますか? それとも、それらを削除する必要がある特定の場所ですか?

この質問によると、私は正しいことをしていますが、なぜこのエラーメッセージが表示されるのでしょうか?

これが私のdeallocルーチンです:

私の実装で奇妙なことに注意すべきことの 1 つは、オブザーバーをオブザーバーに追加したり、オブザービーから削除したりしていることです。これにより、問題が発生する可能性がありますか?

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

objective-c - ココアタッチの質問。タッチシーケンスコンテキストでのKVOの使用

次のコンテキストでKVOを使用したいと思います。

1)touchesBegan:withEvent:オブジェクトのインスタンスを割り当て/初期化し、KVOを介して監視します

私の意図は、オブジェクトの存続期間中のさまざまな動作を観察することです。

2)touchesEnded:withEvent:このインスタンスをNSMutableArrayに割り当て、NSMutableArrayが保持するようになったため、インスタンス参照を解放します。また、removeObserver:forKeyPathを介してインスタンスのoberverを削除する必要があります。

悪臭のある配列要素に観測値を再度追加しない限り、すべての観測値が失われるため、これは問題があります。

誰がオブジェクトを所有しているかに関係なく、オブザーバーをオブジェクトにアタッチしたままにする方法はありますか?

ありがとう、ダグ

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

objective-c - オブジェクトインスタンスの作成/破棄を監視するにはどうすればよいですか?

私はKVC/KVOに夢中です。超強力。ただし、1つの問題があります。私はMVCエトを真にしようとしていますが、Objective-Cクラスインスタンスの割り当てまたは割り当て解除を監視するために観測パターンを使用する方法がわかりません。

これは実際に重要です。コントローラー(またはデリゲート)から監視したい、きめ細かい内部メッセージングを備えたモデルがあるからです。私にとっての障害は、モデルの外部で、カプセル化を危険にさらすモデルの内部ロジックをコントローラーが知らなくても、割り当てが解除されようとしているサブコンポーネントのオブザーバーを削除する方法がわからないことです。

誰かがこのシナリオのアプローチを提案できますか?

ありがとう、ダグ

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

cocoa - NSMutableDictionaryとNSMutableArrayを使用して発生したパフォーマンスヒット>

現在のNSMutableArrayの代わりにNSMutableDictionaryを使用することを検討しています。これは主にKVC/KVOの理由によるものです。コレクションは、私の描画方法の内側のループ内で大きな変化を起こします。この交換を進めると、パフォーマンスが大幅に低下することが予想されますか?

乾杯、ダグ

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

iphone - ココアタッチプログラミング。内側のループのKVO/KVCは非常に遅いです。どうすればスピードアップできますか?

私はKVO/KVCの大ファンになりました。MVCアーキテクチャをクリーンに保つ方法が大好きです。ただし、3Dレンダリングアプリの内部レンダリングループ内でKVOを使用すると、監視対象のオブジェクトごとに1秒あたり60回、場合によっては数百回メッセージが発生するという大きなパフォーマンスの低下は好きではありません。

KVOを高速化するためのヒントとコツは何ですか?具体的には、オブジェクトではなくスカラー値を観察しているので、おそらくラッピング/アンラッピングが私を殺しているのでしょう。私も観測を設定して破棄しています

内側のループ内。おそらく私はそのためにヒットしています。

私は本当に、本当に、KVOが私に提供する大きな柔軟性を維持したいと思っています。手を貸すことができるスピードフリークはいますか?

乾杯、ダグ

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

objective-c - (マネージド) オブジェクトに、そのプロパティの 1 つを再キャッシュする必要があることを KVO に通知するように指示するにはどうすればよいですか?

他のプロパティに基づいて生成されたプロパティを持つオブジェクトがある場合、通常は+keyPathsForValuesAffecting{PropertyName}クラス メソッドを実装します。

私がやろうとしているのは、基本的に NSManagedObject のプロパティと同じことですが、関係をたどっています。

私のモデルは単純です。App と Version の 2 つのエンティティがあります (appcast を生成するアプリを作成しています)。アプリのプロパティが変更されると、上記のメソッドを実装したため、-appcast 文字列が変更され、すべてのバインディングが適切に更新されます。

ただし、特定のアプリのいずれかのバージョン (対多関係) のプロパティが変更されると、-appcast プロパティが適切に生成されません。修正/回避策を講じることはできますか?

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

objective-c - NSDictionary setValue:

わかりました、これは私を狂わせています - 私が正気ではないことを教えてください!

私は宣言する:

私は私の.h

私は初期化します:

ビューに表示されます

私は設定しました:

メソッドで:

そして、「NSMutableDictionary が setValue:forkey: に応答しない可能性があります」というメッセージが表示され、実行時にアプリがクラッシュします。

助けてください :(

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

objective-c - NSPredicatesでのキーパスの使用

(私のカスタム)GTPersonオブジェクトを含むNSDictionaryがあります。GTPersonには、NSMutableSet *parents私が使用する属性とが@propertyあり@synthesizeます。

NSDictionaryから、親を持たない、つまり親の数が0であるすべてのGTPersonオブジェクトをフィルタリングしたいと思います。

私は次のコードを使用しています:

これを実行すると、次のエラーが発生します。

[<GTPerson 0x18e300> valueForUndefinedKey:]: this class is not key value coding-compliant for the key count.

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<GTPerson 0x18e300> valueForUndefinedKey:]: this class is not key value coding-compliant for the key count.'

属性countではなくGTPersonを呼び出そうとしているのはなぜですか?parents

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

cocoa - ココアで自分を観察する

Cocoaでは、addObserver:forKeyPath:options:context:「受信者でも監視者でもない」を保持します。したがって、私は自己を観察することは許可されていると思います。つまり、次のようなことを行うことは完全に有効です

[self addObserver:self forKeyPath...]

selfあなたがdeallocの最初のものとしてオブザーバーとして登録を解除することを覚えている限り。

この仮定は正しいですか?