【发布时间】:2013-05-29 07:30:59
【问题描述】:
我想在对象的属性上添加一个观察者。
我用这个方法:
[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");
}
当观察者和被观察对象相同时,它可以工作。
我可以帮忙吗?
【问题讨论】:
-
刚发完,我就找到了问题的根源。我在 ViewDidLoad 方法中添加了观察者而不是构造函数。
标签: ios objective-c observer-pattern