0

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

我使用这种方法:

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

当观察者和被观察对象相同时,它可以工作。

我可以帮忙吗?

4

1 回答 1

0

在 AppContainer 类中,我有一个在 aString 属性更改时永远不会调用的方法。

也许是因为你打电话self.viewManager addObserver的时候nil

于 2013-06-03T07:29:56.140 回答