我有一个NSNotification的观察者,它被称为两次.我不知道该怎么办.

我在谷歌上搜索了一下,但没有找到解决方案.

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

- (void)connectedToServer:(NSNotification*)notification {

    [[NSNotificationCenter defaultCenter] postNotificationName:@"SendMessageToServer" object:message];
}

推荐答案

第一件事是判断通知本身是否发布了两次.

Solution 2:即使通知只发布一次,action也会被调用,次数与您为通知添加观察者的次数相同(无论通知是否相同).例如,以下两行将为同一通知(aSelector)注册观察者(self)两次.

[[NSNotificationCenter defaultCenter] addObserver:self selector:aSelector name:aName object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:aSelector name:aName object:nil];

您必须找到第二次添加observer的位置,然后将其删除.还要确保添加观察者的代码不会被调用两次.

Solution 3:如果您不确定是否已经添加了观察者,您可以简单地执行以下操作.这将确保只添加一次观察者.

[[NSNotificationCenter defaultCenter] removeObserver:self name:aName object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:aSelector name:aName object:nil];

Objective-c相关问答推荐

如何限制 UITextField 中的特殊字符(点和下划线除外)?

NSString "nil or empty" 判断 - 这完成了吗?

如何创建圆形按钮?

来自 NSDate 的日期名称?

AppDelegate、rootViewController 和 presentViewController

自动布局和按下时隐藏底栏

自动属性合成 (@property) 和继承

启动 Finder 窗口并 Select 特定文件

如何从 AVPlayer(不是 AVAudioPlayer)获取持续时间?

接口类型不能静态分配?

如何计算多边形的圆角?

如何四舍五入浮点值?

UITabBar 未在 ios 7 中显示所选项目图像

iOS 8 Mapkit Objc 无法获取用户位置

NSMutableArray 按顺序添加对象

遍历 NSString 中所有字符的最有效方法

AVAudioPlayer 不播放任何声音

Xcode 警告未使用属性访问结果 - getter 不应用于副作用

带有 UIImage 的 UIBarButtonItem 始终着色 iOS 7

哪个是正确的,nil 或 NULL,来标记没有 Objective-C 块?