2012-02-17 47 views
1

我可以将观察者两次(偶然)添加到通知中心,我将收到两次通知。 是否有可能只获得一个通知?你知道更优雅的解决方案吗?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 
{ 
} 
+1

hm ..如果您多次写入任何其他相同的代码,也会导致错误。 – beryllium 2012-02-17 16:22:54

回答

1

如果你,如果你添加的观察者在其他地方还不能确定,可以用下面的代码每次你要添加观察员

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

这样,要卸下旧的(如果它存在)并添加一个新的。

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

1

您还可以将对象设置为零,然后将对象设置为仍然有效。

不是所有的东西都可以做成安全的。

相关问题