我应该从哪里放置来自NSNotification的removeObserver

时间:2015-06-18 03:15:48

标签: ios objective-c nsnotification

我有三个viewControllers,我试图从viewController 3向viewController 1和2发送通知。我认为最好的方法是使用NSNotification。这就是我到目前为止所拥有的:

在C级 - 发布通知

[[NSNotificationCenter defaultCenter] postNotficationName:@"Updated "object:self];

在B班

在A班和B班 - 首先注册通知

// viewDidLoad
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUpdate:) name:@"Updated" object:nil];

-(void)handleUpdate:(NSNotification *)notification {
    NSLog(@"recieved");
}

到目前为止这是有效的。但是当我在A级和B级取消注册时:

- (void)viewWillDisappear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

handleUpdate方法无法调用。所以明显的问题是我removeObserver's时的notification

我的问题是,如果我到目前为止所做的一切都是正确的,那么当我删除removeObserver时,为什么它不起作用?如果不正确,我可以在哪里removeObserver's

1 个答案:

答案 0 :(得分:1)

你所做的一切都是对的。这是通知的工作方式。 如果您的A,B类始终需要处理更新,则不会删除Observer。 因为您在viewDidLoad中添加了“addObserver”。它意味着你只需要一次addObserver。 正常的错误是你在“viewWillAppear”或“viewDidAppear”中添加“addObserver”,它会在类中添加多个观察者。然后,你必须在viewDidDisappear中删除Observer。