2

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

我的问题:

我在不同的地方(类)使用观察者,我正在添加以下观察者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 的观察者将获取数据(此时我是否需要删除通知,因为没有其他人需要它?)。

4

1 回答 1

2

看起来你对如何NSNotificationCenter工作有误解。您正在注册您的对象 ( self) 以观察通知EADSessionDataReceivedNotification三次,每次都有自己的选择器 ( observer1, observer2, observer3)。

因此,发生的事情对于您编写的代码是正确的。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 {
        // ????
    }
}
于 2013-06-27T18:36:32.210 回答