2008-10-08 11 views
10

Dołączyłem próbkę zasięgu firmy Apple do mojego projektu, więc wiem, czy mam połączenie sieciowe - jeśli nie mam połączenia z siecią, nie zawracaj sobie głowy wysyłaniem i prośbami. Postanowiłem przejść do implementacji powiadomienia o statusie, ponieważ łatwiej było zaktualizować dostępność w tle i natychmiast udostępnić bieżące wyniki, zamiast wysyłać synchroniczne żądanie, gdy chcę nawiązać połączenie sieciowe.Określanie, kiedy połączenie EDGE wraca po awarii na iPhonie

Moim problemem jest to, że zaczynam otrzymywać fałszywe negatywy w sieci EDGE - telefon ma łączność, ale aplikacja uważa, że ​​tak nie jest. Rozumiem, że nie otrzymujesz powiadomienia o połączeniu EDGE, więc moim założeniem jest, że w pewnym momencie utraciłem połączenie i odzyskałem połączenie. Ponowne uruchomienie aplikacji zwykle wystarcza, aby zobaczyć połączenie sieciowe.

To nie jest optymalne rozwiązanie, więc zastanawiałem się, czy ktoś inny natknął się na ten problem i miał jakiekolwiek przemyślenia na temat rozwiązań.

(Nie wiem, czy dotyczy to również 3G, ja mam iPhone'a pierwszej generacji).

Odpowiedz

14

Notificataions dotyczące dostępności również nie były dla mnie niezawodne, jeśli chodzi o wykrywanie Wi-Fi. Więc używam zamiast tego odpytywania. Sprawdzanie co 5 sekund wydaje się nie zaszkodzić.

- (void) checkReachability { 
    BOOL connected = ([[Reachability sharedReachability] localWiFiConnectionStatus] == ReachableViaWiFiNetwork); 

    // Do something... 

    [self performSelector:@selector(checkReachability) withObject:nil afterDelay:5.0]; 
} 
+0

Thanks I planuje wprowadzenie osiągalności dzisiaj, więc prawdopodobnie uratował moje przyszłe ja trochę czasu :) –

+0

hej jak mogę to wykorzystać class.I dodany Reachability.h i plik Reachability.m oraz plik exportsreachability.h w mojej appDelegate teraz, kiedy umieszczam twoją metodę w moim appDelegate, dostaję błędy. –

+4

Kod dostępu został znacznie zmieniony w ciągu ostatniego roku. Tak więc powyższy kod przestanie działać. –

1

Istnieje ładny przykład osiągalności w sieci. działa cudownie: http://servin.com/iphone/iPhone-Network-Status.html

Ale widzisz, kiedy próbuję użyć go na swój własny sposób, po prostu bombarduje.

Próbowano wdrożyć go za pomocą:

NSString *sCellNetwork;  
NSString *sNetworkReachable; 

if (flags & kSCNetworkFlagsReachable || flags & kSCNetworkReachabilityFlagsIsWWAN) 

{do it} 

else { 
    Network fail alert; 
}