2016-02-12 10 views
5

Buduję przypadki błędów dla moich wywołań interfejsu API i chcę sprawdzić warunek, gdy połączenie internetowe jest niedostępne.Reachability vs NSURLSession response do wykrycia połączenia internetowego

dataTaskWithRequest Wydaje się, że obsługuje to dobrze i zwraca NSError z kodem -1009 z opisem braku połączenia z Internetem. Nie muszę czekać na żądanie przekroczenia limitu czasu.

W jakich przypadkach chciałbym zamiast tego użyć Ramy Dostępności? Dzięki

+0

yamski @ robi moja odpowiedź pomogła Ci lub potrzebujesz więcej pomocy –

+0

@RohitKP, przykro mi to nie pomogło, ale prowadzi mnie do właściwego rozwiązania. – yamski

Odpowiedz

12

Zrobiłem trochę badań i znalazłem moją odpowiedź w Apple Docs.

Zalecaną najlepszą praktyką jest próba połączenia. Jeśli wystąpi problem z połączeniem, otrzymasz obiekt NSError, którego powinieneś użyć do przetestowania połączenia.

Firma Apple zaleca używanie opcji Zasięg informacji tylko jako sposobu diagnozowania błędów i dalszego debugowania znanych problemów. Wygląda na to, że powinieneś używać tylko osiągalności, aby wykryć, kiedy sieć powraca do trybu online po awarii.

„Zawsze próbują nawiązać połączenie. Nie należy próbować odgadnąć, czy usługa sieciowa jest dostępna, a nie w pamięci podręcznej tych ustaleń.

Jeżeli połączenie nie powiedzie się, należy użyć API SCNetworkReachability pomóc zdiagnozować przyczynę niepowodzenie."

źródło: https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/WhyNetworkingIsHard/WhyNetworkingIsHard.html#//apple_ref/doc/uid/TP40010220-CH13-SW3

„Kiedy każde zadanie kończy, obiekt NSURLSession wzywa URLSession:task:didCompleteWithError: metodę delegata jest z obu obiektu błędu lub zera (jeśli zadanie zakończone powodzeniem)

Jeśli zadanie nie powiodło się,. większość aplikacji powinna ponawiać prośbę do czasu, aż użytkownik anuluje pobieranie lub serwer zwróci błąd wskazujący, że żądanie nigdy się nie powiedzie, ale Twoja aplikacja nie powinna natychmiast spróbować ponownie. Zamiast tego powinna użyć interfejsów API osiągalności, aby określić, czy serwer jest osiągalny i powinien złożyć nowy wniosek tylko wtedy, gdy otrzyma powiadomienie kość, że osiągalność się zmieniła. "

źródło:

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/NSURLSessionConcepts/NSURLSessionConcepts.html