Domanda

Posso aggiungere due volte l'osservatore (per sbaglio) al centro notifiche e riceverò le notifiche due volte. È possibile ricevere una sola notifica?Conosci soluzioni più eleganti?

Ti mostro questo esempio perché questo potrebbe portare a bug.

- (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
{
}
È stato utile?

Soluzione

Se non sei sicuro di aver aggiunto l'osservatore da qualche altra parte, puoi utilizzare il seguente codice ogni volta che aggiungi un osservatore

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

In questo modo rimuovi quello vecchio (se esisteva) e ne aggiungi uno nuovo.

Non è a prova di errore al 100%, ma è un inizio.Ciò potrebbe non riuscire nelle app multi-thread in cui le chiamate vengono effettuate in modo asincrono o in altre situazioni uniche.

Altri suggerimenti

Puoi anche impostare un oggetto su nil e poi utilizzarlo in seguito come se fosse ancora valido.

Non tutto può essere protetto dai guasti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top