Pergunta

posso adicionar observador duas vezes (por acidente) para o centro de notificação e vou receber notificações duas vezes. É possível obter apenas uma notificação? Sabe soluções mais elegantes?

Eu mostro-lhe este exemplo, porque isso pode levar a erros.

- (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
{
}
Foi útil?

Solução

Se você não tem certeza se você adicionou o observador em outro lugar, você pode usar o seguinte toda código que você está adicionando um Observer

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

Desta forma, você está removendo o antigo (se existisse) e adicionar um novo.

Não é 100% não prova, mas é um começo. Isso poderia falhar em multi-threaded aplicações onde as chamadas estão sendo feitas assíncrona ou outras situações únicas.

Outras dicas

Você também pode definir um objeto para nulo e, posteriormente, usar esse objeto como se ainda era válido.

Nem tudo pode ser feito à prova de falhas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top