我正在开发一个必须与外部配件通信的应用程序。该应用程序有几个请求发送到外部附件。
我的问题:
我在不同的地方(班级)使用观察员,我在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];
第一观察者效果很好,但我遇到了其他两个问题。在第一个使用之前,它们不会响应。我需要添加其他内容吗?
流程如下:
向ext-acc发送请求并触发一个标志以了解哪个观察者将获取返回的数据
ext-acc以数据回应
接收方法将通知推送到通知中心。
标记为1的观察者将获取数据(此时我是否需要删除通知,因为没有其他人需要它?)。
答案 0 :(得分:2)
看起来您对NSNotificationCenter
的工作方式存在误解。您正在注册对象(self
)以观察通知EADSessionDataReceivedNotification
三次,每次都有自己的选择器(observer1
,observer2
,observer3
)。< / 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 {
// ????
}
}