3

我在 A 类中创建了一个通知,例如

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

我正在以 B 类的名称发布此通知,例如

    [[NSNotificationCenter defaultCenter]postNotificationName:@"ViewChanged" object:nil];

现在我想在 C 类中删除这个通知,如下所示。可能吗?因为我需要从class-c去class-a。

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

我试过了,但通知没有删除,它调用了两次。如何创建对象NSNotificationCenter

4

2 回答 2

2
[[NSNotificationCenter defaultCenter] removeObserver:nil name:@"ViewChanged" object:nil];

如文档中所述,您的代码无法正常工作,因为 removeObserver 的第一个参数为零。

- (void)removeObserver:(id)notificationObserver 名称:(NSString *)notificationName 对象:(id)notificationSender

通知观察者

观察者从调度表中删除。指定观察者以仅删除此观察者的条目。不能为 nil,否则消息将无效。

一个可能的解决方案:

objectA可以监听第二个通知,例如removeA. 然后,您创建一个方法,在objectA其中删除objectA作为ViewChanged. removeA应该触发该方法。

objectC然后只需要发布removeA通知并objectA停止收听。

于 2013-08-31T19:01:34.680 回答
-1

正如@Wain 正确所说,这是奇怪/错误的设计。如果你真的想买,你需要做:

[[NSNotificationCenter defaultCenter] removeObserver:objectA name:@"ViewChanged" object:nil];

您调用时objectA传递的对象也是如此。您现在需要访问C 类的实例,这表明您正在尝试做的事情是错误的/奇怪的。selfaddObserver:objectA

于 2013-08-31T18:54:28.673 回答