0

我正在使用这样的 addObserver :

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(notificationReceived:) name:nil object: nil];

一切正常,但我认为当我不再需要它时移除观察者可能是一种很好的形式......我发现我需要使用这一行:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"observerName" object:nil];

问题是,当我更改我的 addObserver 行以包含名称以便 removeObserver 知道要删除哪个观察者时,不再调用通知。此行运行但在添加名称时被忽略:

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(notificationReceived:) name:@"observerName" object: nil];

我可以将名称设置回 nil 并且它再次起作用。有人知道我在这里做错了什么吗?

谢谢!

4

1 回答 1

4

我认为您可能会误认为参数的含义。

name:告诉系统您想要了解哪些通知。

self是实际的观察者,所以当你removeOberserver:self停下来接收任何通知时。

您应该再次仔细阅读文档以了解其含义:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html#//apple_ref/doc/uid/20000219-SW1

例如,请参阅如何在 Objective-C 中创建一个通过 NSNotificationCenter 发送和接收事件的类?

于 2013-03-19T15:52:50.920 回答