NSMutableDictionaryの周りの構図を使ってこれを実装しました。私は少しのコードがどれぐらいか驚いた。私が実装したクラスはボードであり、ボードゲームでモデルを表現するために使用されています。誰でもaddObserver呼び出すことにより、ボード状態の変化を購読することができます:メソッドを、このように実装:あなただけKVOモデルを使用して、キーを購読することができますので、私はだまさ
- (void)addObserver:(id)observer {
for (id key in grid)
[self addObserver:observer
forKeyPath:[key description]
options:0
context:key];
}
とキーの説明に加入キー自体をコンテキストとして渡します。私のボードのインスタンスを観察するオブジェクトでは、-observeValueForKeyPath:ofObject:change:context:
を実装してkeyPath文字列を無視し、渡されたコンテキストを使用します。
私の単純なボードクラスは、このメソッドを使用して作成した人工物件に対してKVOに準拠していないため、をoptions
プロパティに渡したため、KVOマシンはこれらのキーの古い値または新しい値を取得しようとしません。それは私のコードを爆破させる原因になります。ボードを変更
何か(私の単純なクラスでこれを行う唯一の方法がある)KVO機械が行動に飛躍させるために必要な通知を上げる:
- (void)setPiece:(id)piece atLocation:(Location*)loc {
[self willChangeValueForKey:[loc description]];
[grid setObject:piece forKey:loc];
[self didChangeValueForKey:[loc description]];
}
出来上がり! NSMutableDictionaryを非文字列キーで購読する!
ありがとうございました。私は、NSMutableDictionaryの周りの構成が行く方法だと思う。私はまだキーがNSStringsでない限り、その作業を行う方法を見ることができませんが、私はおそらくそれで動作すると思います。 –
@Quinn Taylor:あなたのカスタムサブクラスへのリンクが死んでいるように見えます。このコードをチェックする必要があります。まだどこかにぶら下がっていますか? – Cyrille