我可以两次(意外地)将观察者添加到通知中心,我将收到两次通知。 是否可以只收到一个通知?你知道更优雅的解决方案吗?
我给你看这个例子是因为这可能会导致错误。
- (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
{
}
最佳答案
如果您不确定是否在其他地方添加了观察者,您可以在每次添加观察者时使用以下代码
[[NSNotificationCenter defaultCenter] removeObserver:self name:aName object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:aSelector name:aName object:nil];
通过这种方式,您将删除旧的(如果存在)并添加新的。
这不是 100% 的失败证明,但它是一个开始。在异步调用或其他特殊情况下,这可能会在多线程应用程序中失败。
关于ios - NSNotificationCenter 可能会导致错误。你知道更优雅的解决方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9331675/