Problemy z NSNotification
Kiedy moja klasa inicjalizuje, dodaje się jako obserwator do wielu różnych powiadomień Wi-Fi. Z jakiegoś powodu selektor nie działa, gdy coś się dzieje. Jakieś pomysły? Z góry dziękuję.
<code>-(id) init { if (self) { sself = self; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:CWModeDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:CWSSIDDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:CWBSSIDDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:CWCountryCodeDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:CWLinkDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:CWPowerDidChangeNotification object:nil]; </code>
AKTUALIZACJA: Oto metoda handleNotification:
<code>-(void) handleNotification:(NSNotification*) notification { NSLog(@"Notification Received"); } </code>
Do mojego projektu włączyłem framework CoreWLAN:
Pobrałem CoreWLANWirelessManager.app i to właśnie używam w celach informacyjnych. Co dziwne, kod Apple używa nieaktualnych powiadomień i nadal działa. Bez powodzenia próbowałem użyć nowego interfejsu API i przestarzałego interfejsu API. Nie jestem pewien, czy mogę tutaj zamieścić ich kod, ale nie ma dosłownie żadnej różnicy. Selektor ma nawet tę samą nazwę.
Nie wahaj się poprosić o dalsze opracowanie.
AKTUALIZACJA (Po odpowiedzi Dustina): Stworzyłem nowy projekt w nadziei na wyizolowanie problemu. Skonfigurowałem pliki .h i .m zgodnie z opisem. Niestety nadal nie otrzymuję żadnych powiadomień. Aby pokazać, że nie kłamie (lub szalony), załączyłem dwa (dość zatłoczone) zrzuty ekranu, które zostały zrobione w tym samym czasie wykonywania. Uwaga: (1. Mam punkt przerwania w metodzie handleNotification:. Aplikacja nigdy się nie zatrzymuje. (2. Włączyłem okno sieciowe, aby pokazać mój Macma rzeczywiście zmienił sieci Wi-Fi w tym czasie pracy. (3. Nic nie jest NSLoged
Sieć 1:
Sieć 2:
AKTUALIZACJA 17 maja 2012: Odpowiedź Dustina była poprawna, ale nazwa interfejsu Wi-Fi różni się w zależności od sprzętu, na którym działa aplikacja. W moim przypadku (MacBook Air; brak Ethernetu) mój Wi-Fi to en0 zamiast en1. Udało mi się pobrać plik konfiguracji systemu plst z moich mam iMaca, a Wi-Fi nazywa się en1. Ethernet to en0. Dziękuję wszystkim za pomoc.