Wenn die Klasse eine benutzerdefinierte Klasse ist, wird nach dem Senden der Benachrichtigung der Selektor, der dem Beobachter entspricht, zweimal aufgerufen. Gibt es eine bessere Lösung, so dass der Selektor nur einmal aufgerufen wird?Warum der Observer in NSNotification zweimal aufgerufen ....?
Antwort
Wenn die Observer-Klasse für eine Benachrichtigung nach Name, aber nicht nach einem bestimmten Objekt registriert ist, erhält sie mehrere Nachrichten, da sie bei jedem Auftreten der Benachrichtigung unabhängig vom Ursprungsobjekt aufgerufen wird.
Wenn der Beobachter für ein bestimmtes Objekt, aber nicht für eine benannte Benachrichtigung registriert ist, wird er jedes Mal benachrichtigt, wenn eine Benachrichtigung bezüglich dieses Objekts vorliegt.
Ein alternativer Mechanismus für ist beobachtenden Schlüssel Wert in einem entfernten Zustand von Änderungen informiert zu werden - http://developer.apple.com/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html
Wenn der Selektor zweimal aufgerufen wird, haben Sie sich wahrscheinlich zweimal registriert.
Was für mich gearbeitet ein paar Dinge waren:
1-In der Klasse, in der die addObserver Registrierung Aufruf wird gemacht, um ein bestimmtes Objekt hinzuzufügen.
2-In der Klasse, in der der postNotification-Aufruf erfolgt, als der gleiche Objekttyp.
Ich mache auch meine postNotificaiton in einem dispatchAsync Anruf, aber das ist nicht auf Ihr Problem bezogen.
Überprüfen Sie, ob der addObserver nur einmal gesetzt ist. In meinem Fall lief die addObserver-Schleife zweimal, daher der Fehler.
Das Problem ist, gibt es zwei Steuerelemente in der Feder, die auf die gleiche Klasse angepasst ist. und Da der Beobachter in der watchFromNib() dieser Klasse registriert wurde, wird der Selektor auch zweimal für eine einzelne postNotification aufgerufen. :( –