我想在对象的属性上添加一个观察者。
我使用这种方法:
[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");
}
当观察者和被观察对象相同时,它就有效。
我可以帮忙吗?
答案 0 :(得分:0)
在AppContainer类中,我有这个方法,当aString属性改变时,它永远不会被调用。
也许是因为你在self.viewManager addObserver
时调用了nil
?