【问题标题】:addObserver method works only within the same classaddObserver 方法仅适用于同一类
【发布时间】: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


【解决方案1】:

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

也许是因为你打电话给self.viewManager addObserver,而它是nil

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多