Jeśli klasa jest klasą niestandardową, po wysłaniu powiadomienia selektor odpowiadający obserwatorowi jest wywoływany dwukrotnie. Czy istnieje jakieś lepsze rozwiązanie, aby selektor był wywoływany tylko raz?Dlaczego obserwator w NSNotification zadzwonił dwa razy ...?
Odpowiedz
Jeśli klasa obserwatora jest zarejestrowana dla powiadomienia przez nazwę, ale nie w odniesieniu do konkretnego obiektu, otrzyma wiele wiadomości, ponieważ będzie wywoływana za każdym razem, gdy wystąpi powiadomienie, niezależnie od obiektu źródłowego.
Podobnie, jeśli obserwator jest zarejestrowany w odniesieniu do określonego obiektu, ale nie w odniesieniu do określonego powiadomienia, będzie przesyłany komunikat za każdym razem, gdy pojawi się powiadomienie dotyczące tego obiektu.
Alternatywny mechanizm jest informowany o zmianach w stanie dalekim, jest kluczem Wartość obserwowanie - http://developer.apple.com/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html
Jeśli wybierak jest wywoływany dwa razy, prawdopodobnie zarejestrowałeś go dwukrotnie.
Co pracował dla mnie było kilka rzeczy:
1-W klasie gdzie rejestracja addObserver wywołanie, było dodanie konkretnego obiektu.
2-W klasie, w której wykonywane jest wywołanie postNotification, jako ten sam typ obiektu.
Wykonuję również postNotificaiton w wywołaniu dispatchAsync, ale nie jest to związane z twoim problemem.
Sprawdź, czy addObserver jest ustawiony tylko raz. W moim przypadku pętla addObserver działała dwa razy, stąd błąd.
Problem polega na tym, że w stalówce są dwie kontrolki, które są dostosowane do tej samej klasy. i Ponieważ obserwator został zarejestrowany w awakeFromNib() tej klasy, selektor jest również wywoływany dwa razy dla pojedynczego postu. :( –