【问题标题】:Remove Array Controller observer移除阵列控制器观察者
【发布时间】:2013-12-28 16:25:51
【问题描述】:

为阵列控制器添加的观察者不会被删除。 添加代码:

[self.arrayController addObserver:self
                       forKeyPath:@"selectionIndexes"
                          options:NSKeyValueObservingOptionNew
                          context:nil];

移除观察者的代码:

@try {
    //[self removeObserver:self forKeyPath:@"selectionIndexes"];
    [self.arrayController removeObserver:self forKeyPath:@"selectionIndexes"];
}
@catch (NSException *exception) {}

即使在删除观察者之后它也无效,并且observeValueForKeyPath 正在被调用。我在这里做错了什么?

【问题讨论】:

    标签: objective-c macos cocoa


    【解决方案1】:

    您可能添加了多个观察者。 尝试在 addObserver:forKeyPath:options:context 行设置断点,看看它是否比 removeObserver:forKeyPath 行调用更多。

    【讨论】:

    • 这是不可能的,因为我已经将这些删除/添加观察者包装在另一个类方法中,所以在添加之前调用[self removeObservers] 以确保删除之前添加的任何观察者。仍然再次检查以检查其添加的次数是否多于被删除的次数,但不是,有 2 次调用添加和删除。但它仍然被调用了两次。
    • 有没有办法将号码减少到一次通话?这可能有助于确定问题出在哪里。
    • 我需要删除观察者在后面做一些事情并再次打开观察者。但现在它每次都不断添加观察者。一切正常,直到我删除并添加。所以问题是,它没有被删除。
    • 也许另一种方法是添加和删除观察者一次。然后,添加一个允许您绕过 observeValueForKeyPath 内容的 BOOL。 observeValueForKeyPath 总是被调用,但是一个 if 语句测试你的 BOOL 将确定你的代码是否运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    相关资源
    最近更新 更多