0

オブジェクトのプロパティにオブザーバーを追加したいと思います。

私はこの方法を使用します:

[self addObserver:self forKeyPath:@"showButtons" options:NSKeyValueObservingOptionNew context:NULL];

オブザーバーと監視対象のオブジェクトがメソッドobserveValueForKeyPathi が呼び出した同じオブジェクトである場合、オブザーバーが別のオブジェクトである場合、メソッドは呼び出されません。

私が何をしたかを説明します。

ViewManagerプロパティaStringを持つオブジェクトがあります。

クラスAppContainerにはプロパティがありますViewManager。私のクラス AppContainer では、プロパティの初期化後に、次のように ViewManager の aString プロパティのオブザーバーとしてViewManager追加します。AppContainer

[self.viewManager addObserver:self forKeyPath:@"aString" options:NSKeyValueObservingOptionNew context:NULL];

クラスにはAppContainer、aString プロパティが変更されたときに呼び出されないこのメソッドがあります。呼び出されたことのないメソッドは次のとおりです。

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

ただし、次のViewManagerようにクラス自体にオブザーバーを追加しました。

[self addObserver:self forKeyPath:@"aString" options:NSKeyValueObservingOptionNew context:NULL];

このクラスで呼び出されるメソッドは次のとおりです。

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    NSLog(@"itself");
}

オブザーバーと観測対象が同じ場合、機能します。

助けてもらえますか?

4

1 に答える 1