2011-07-14 9 views
0

私はこれを表示する例を作ってみましょう:観察されたクラスのメンバーへの変更は、オブザーバーからメンバーに向けて変更されますか?

私はクラスにClassAを持って、それが公共のメンバーmemberAが含まれています。 また、パブリックメソッドメソッドAが含まれており、memberAの値が変更されます。

instantA 

が、私はこれを呼び出す:

は今、私はにClassAの瞬間を持っている、これはオブザーバーオフに触れる理由

[instantA addObserver:anObserver forKeyPath:@"memberA" options:NSKeyValueObservingOptionNew context:NULL]; 

instantA.memberA = xxxxx; 

をしかし、これはしません:

[instantA methodA]; 

答えて

0

これは、プロパティのためにコンパイラによって生成された合成メソッドがKVOに準拠しているためですが、手動で変更するメソッドはおそらくありません。

あなたのメソッドでは、プロパティではなくiVarを直接変更していると思いますか? 、あなたはこれをやっている。例えば

...

- (void)methodA 
{ 
    memberA = someValue; 
} 

またはあなたがこれをやっている...

- (void)methodA 
{ 
    self.memberA = someValue; 
} 

後者はオブザーバーをトリガする、前者はしません。あなたはKVOに準拠し、それをすることによって、元のトリガーにオブザーバーを作ることができます...

- (void)methodA 
{ 
    [self willChangeValueForKey:@"memberA"]; 
    memberA = someValue; 
    [self didChangeValueForKey:@"memberA"]; 
} 

はKVO準拠の詳細については、Appleの公式ドキュメントhereを参照してください。

+0

ありがとうございます、あなたは素晴らしいです! – CarmeloS

関連する問題