NSNotificationCenter可能导致错误。你知道更优雅的解决方案吗?

时间:2012-02-17 16:13:09

标签: ios nsnotificationcenter

我可以将观察者两次(偶然)添加到通知中心,我会收到两次通知。 是否可以只获得一个通知?你知道更优雅的解决方案吗?

我告诉你这个例子,因为这可能会导致错误。

- (void)viewDidLoad 
{
 [[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardDidShow:)
                                             name:UIKeyboardDidShowNotification
                                           object:nil];
 [[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardDidShow:)
                                             name:UIKeyboardDidShowNotification
                                           object:nil];
}

- (void)keyboardDidShow:(NSNotification *)ntf
{
}

2 个答案:

答案 0 :(得分:1)

您还可以将对象设置为nil,然后再使用该对象,就像它仍然有效一样。

并非一切都可以安全失效。

答案 1 :(得分:1)

如果您不确定是否在其他地方添加了观察者,则每次添加观察者时都可以使用以下代码

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

这样您就可以删除旧的(如果存在)并添加新的。

这不是100%失败证明,但它是一个开始。在多线程应用程序中,这可能会导致调用异步或其他独特情况。