Se la classe è una classe personalizzata, dopo aver postato la notifica, il selettore corrispondente all'osservatore viene chiamato due volte. Esiste una soluzione migliore in modo che il selettore venga chiamato una sola volta?Perché l'Observer in NSNotification ha chiamato due volte ....?
risposta
Se la classe observer è registrata per una notifica per nome, ma non contro un oggetto specifico, riceverà più messaggi, in quanto verrà richiamata ogni volta che si verifica la notifica, indipendentemente dall'oggetto di origine.
Allo stesso modo, se l'osservatore è registrato su un oggetto specifico, ma non contro una notifica con nome, verrà messaggiato ogni volta che c'è una notifica riguardante quell'oggetto.
Un meccanismo alternativo per essere informati delle variazioni di uno Stato lontano, è la chiave Valore osservazione - http://developer.apple.com/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html
Se il selettore viene chiamato due volte, probabilmente lo si è registrato due volte.
Quello che ha funzionato per me è stato un paio di cose:
1-Nella classe dove la registrazione addObserver la chiamata è fatta, doveva aggiungere un oggetto specifico.
2-Nella classe in cui viene effettuata la chiamata postNotification, come lo stesso tipo di oggetto.
Anche io faccio la mia postNotificaiton in una chiamata dispatchAsync, ma non è correlato al tuo problema.
Verificare se l'addObserver è impostato una sola volta. Nel mio caso, il ciclo addObserver ha funzionato due volte, quindi il bug.
- 1. didRegisterForRemoteNotificationsWithDeviceToken ha chiamato due volte?
- 2. Perché il distruttore della classe ha chiamato due volte?
- 3. doFilter ha chiamato due volte, comportamento previsto?
- 4. Perché questo slot viene chiamato due volte?
- 5. Perché onKey() viene chiamato due volte?
- 6. didMoveToParentViewController chiamato due volte
- 7. keyboardWillShow chiamato due volte
- 8. viewDidAppear chiamato due volte in iOS5
- 9. Spring MVC InterceptorHandler ha chiamato due volte con DeferredResult
- 10. Perché il segnale viene chiamato due volte in ReactiveCocoa?
- 11. Perché numberOfSectionsInTableView viene chiamato due volte in UITableViewController?
- 12. applicationDidBecomeActive chiamato per due volte
- 13. jQuery Mobile "pagebeforechange" essere chiamato due volte
- 14. Perché il metodo onNewIntent (Intent intent) viene chiamato due volte?
- 15. Perché PrintStream.close() finisce per essere chiamato due volte?
- 16. HttpModule EndRequest gestore chiamato due volte
- 17. OnActionExecuted chiamato due volte nell'API Web
- 18. flatMap() chiamato due volte su evento singolo
- 19. angolari risolve ui-router chiamato due volte
- 20. Metodo chiamato -viewWillLayoutSubviews corre inspiegabilmente due volte
- 21. Costruttore MainWindow chiamato per due volte
- 22. MVC 6, HomeControler Index() chiamato due volte
- 23. Il listener del clic chiamato due volte
- 24. Click evento chiamato due volte su touchend in iPad
- 25. Perché zumero_sync deve essere chiamato più volte?
- 26. Perché __PRETTY_FUNCTION__ ha chiamato __PRETTY_FUNCTION__?
- 27. Perché beginContact viene chiamato più volte?
- 28. dideceeceData ha chiamato due volte durante la pubblicazione di un Url in iphone?
- 29. Perché dichiarare jQuery due volte?
- 30. Perché il ContentObserver viene chiamato più volte?
Il problema è, ci sono due controlli nel pennino, che è personalizzato per la stessa classe. e Poiché l'osservatore è stato registrato in awakeFromNib() di quella classe, il selettore viene anche chiamato due volte per una singola postNotifica. :( –