1

私のNSMutableDictionaryには、単純なキー(@ "one"、@ "two"、@ "three")と複雑なキー(@ "com.alpha"、@ "com.beta")が含まれています。複雑なキーにオブザーバーを使用することは可能ですか?

オブザーバーは単純なキーではうまく機能しますが、複雑なキーでは機能しませんでした。解決策は何ですか?

[self.dict addObserver:self forKeyPath:@"com.alpha" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];

-(IBAction) onChange:(id)sender
{
 [self.dict setObject:@"newValue" forKey:@"com.alpha"];
}

-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
  NSLog(@"____ value had changed");
}
4

2 に答える 2

5

.キー値コーディングまたはキー値監視でドットを含むキーを使用することはできません。ドットは、トラバースするオブジェクトプロパティのシーケンスを指定するために使用されるキーパスを構築するために使用されます。(「Key-Valueコーディングプログラミングガイド」のキーとキーパスを参照してください。)

例えば、

id x = [object valueForKeyPath:@"com.alpha"];

と同じです

id x = [[object valueForKey:@"com"] valueForKey:@"alpha"];

単一のキー「com.alpha」の場合、名前を「com_alpha」などに変更する必要があります。

于 2013-01-05T14:43:25.107 に答える
0

NSDictionaryは、Key-ValueObservingに準拠していません。KVOを使用して辞書の変更を観察することはできません。場合によっては機能するように見えても、将来のバージョンで機能しなくなる可能性があります。

于 2013-01-21T22:44:15.727 に答える