2009-08-25 9 views

Odpowiedz

3

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

8

Jeśli wybierak jest wywoływany dwa razy, prawdopodobnie zarejestrowałeś go dwukrotnie.

+0

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. :( –

1

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.

0

Sprawdź, czy addObserver jest ustawiony tylko raz. W moim przypadku pętla addObserver działała dwa razy, stąd błąd.