在观察事件后删除观察者

发布于 2024-11-16 23:54:03 字数 613 浏览 1 评论 0原文

我有一个对象观察者,我只需要检测一件事。一旦我完成了它,我想将其删除以消除开销。

所以它看起来像这样:

-(void) observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*) change context:(void*)context{
    if ([keyPath isEqual:@"doingSomething"]){
        if ([object isDoingSomething] == NO) {
                    [my_object setDoingSomething: DO_NOTHING_FOREVER];
                    [my_object removeObserver:self forKeyPath:@"doingSomething"] // <= ERROR eventually
                }
        }
}

但这不起作用,并抛出一个错误,如:

NSKVOPendingNotificationRelease“EXC_BAD_ACCESS”

I have an object observer that I only need to detect one thing. Once I'm done with it, I'd like to remove it to eliminate overhead.

So it would look something like this:

-(void) observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*) change context:(void*)context{
    if ([keyPath isEqual:@"doingSomething"]){
        if ([object isDoingSomething] == NO) {
                    [my_object setDoingSomething: DO_NOTHING_FOREVER];
                    [my_object removeObserver:self forKeyPath:@"doingSomething"] // <= ERROR eventually
                }
        }
}

This does not work though and throws an error like:

NSKVOPendingNotificationRelease “EXC_BAD_ACCESS”

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

傻比既视感 2024-11-23 23:54:03

您不应该在对象上调用removeobserver吗?

[object removeObserver:self forKeyPath:@"doingSomething"];

removeObserver:forKeyPath: 方法应该在接收器上调用。

Shouldn't you be calling remove observer on the object?

[object removeObserver:self forKeyPath:@"doingSomething"];

removeObserver:forKeyPath: method should be called on the receiver.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文