Notificationcenter - 观察者无法正常工作

时间:2013-06-27 18:24:28

标签: ios objective-c push-notification nsnotificationcenter

我正在开发一个必须与外部配件通信的应用程序。该应用程序有几个请求发送到外部附件。

我的问题:

我在不同的地方(班级)使用观察员,我在viewDidLoad中添加了以下观察者:

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

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

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

第一观察者效果很好,但我遇到了其他两个问题。在第一个使用之前,它们不会响应。我需要添加其他内容吗?

流程如下:

  1. 向ext-acc发送请求并触发一个标志以了解哪个观察者将获取返回的数据

  2. ext-acc以数据回应

  3. 接收方法将通知推送到通知中心。

  4. 标记为1的观察者将获取数据(此时我是否需要删除通知,因为没有其他人需要它?)。

1 个答案:

答案 0 :(得分:2)

看起来您对NSNotificationCenter的工作方式存在误解。您正在注册对象(self)以观察通知EADSessionDataReceivedNotification三次,每次都有自己的选择器(observer1observer2observer3)。< / p>

因此,正在发生的事情对于您编写的代码是正确的。发布EADSessionDataReceivedNotification时,NSNotificationCenter会将指定的选择器发送给每个观察者。没有条件逻辑或方法来取消通知。

根据您的描述,听起来您应该只观察一次通知并检查您的标志以确定如何处理。类似的东西:

// observe notificaton
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataReceived:) object:nil];

// notification handler
- (void)dataReceived:(NSNotification *)notification {
    if (someCondition) {
        [self handleDataCondition1];
    }
    else if (aSecondCondition) {
        [self handleDataCondition2];
    }
    else if (aThirdCondition) {
        [self handleDataCondition3];
    }
    else {
        // ????
    }
}