addObserver方法仅适用于同一个类

时间:2013-06-03 07:21:46

标签: ios objective-c observer-pattern

我想在对象的属性上添加一个观察者。

我使用这种方法:

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

当观察者和观察对象是同一个对象时,调用方法observeValueForKeyPath,但当观察者是另一个对象时,不调用该方法。

我解释了我的所作所为。

我有一个对象ViewManager,它有一个属性aString。

班级AppContainer有一个属性ViewManager。 在我的AppContainer类中,在ViewManager属性初始化之后,我添加AppContainer作为ViewManager的aString属性的观察者,如下所示:

[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");
}

当观察者和被观察对象相同时,它就有效。

我可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

  

在AppContainer类中,我有这个方法,当aString属性改变时,它永远不会被调用。

也许是因为你在self.viewManager addObserver时调用了nil