2015-10-20 13 views
6

Po skonfigurowaniu NSURLSession/Alamofire.Manager z konfiguracją sesji tła, , jeśli nie ma połączenia z Internetem, oczekuję otrzymania zwykłego NSError "Domena błędu = NSURLErrorDomain Code = -1009" Połączenie internetowe wydaje się być offline. ".NSURLSession z konfiguracją sesji tła nie zwraca błędu, gdy nie ma połączenia

Stało się to regularnie, jeśli nie używam konfiguracji w tle, ale jeśli wykonam taką konfigurację, moja metoda Nigdy nie zostanie wywołany, zostanie on ostatecznie wywołany, gdy ponownie aktywuję wifi.Autobicie wolę odbierać wifi

Ive błąd natychmiast. Czy czegoś brakuje?

Odpowiedz

3

Powodem, dlaczego awaria sieci w tle zadania sesji nie zwraca żadnego błędu jest:

Generalnie sesja tło NSURLSession nie powiedzie zadanie jeśli coś pójdzie nie tak na drucie. Zamiast tego nadal szuka dobrego czasu na uruchomienie żądania i ponowne próby w tym czasie. Kontynuuje to do czasu wygaśnięcia limitu czasu zasobu (to jest wartości w metodzie timeoutIntervalForResource o wartości w obiekcie NSURLSessionConfiguration używanym do utworzenia sesji). Aktualna wartość domyślna dla tej wartości wynosi jeden tydzień!

Znalazłem powyższą odpowiedź na developer forum.

Więcej szczegółów, które mogłyby pomóc w sesji tła:

Inną korzyścią jest to, że w sesji tła, możemy monitorować sieć i środowiska zasilania dla Ciebie. Oznacza to, że obejmujemy rzeczy, takie jak osiągalność i łączność w sieci, więc nie musisz używać , aby w ogóle korzystać z interfejsów API osiągalności. Nie będziemy próbować ustanawiać połączenia , dopóki nie dowiemy się, że serwer jest osiągalny. I podobnie, , jeśli użytkownik wykonuje pobieranie i wychodzi z Wi-Fi, zwykle , to zadanie zakończyłoby się niepowodzeniem z błędem transmisji. Jednak w sesji tła będziemy automatycznie odzyskiwać dane po wykonaniu tej czynności, a następnie ponowimy próbę i wznowimy ją tam, gdzie przerwaliśmy, jeśli pobieranie zostanie wznowione. I nie usłyszysz o tym błędzie.

Źródło: WWDC 2014

2

Interfejs API nie mówi, że sieć nie jest obecna, ponieważ byłby to błąd wskazujący, że połączenie nigdy się nie zakończy. W rzeczywistości będzie, zakładając, że sieć w końcu wróci.

Jeśli chcesz otrzymać błąd z jakiegoś powodu, nie używaj sesji w tle.

Ewentualnie, jeśli chcesz się dowiedzieć, czy w sieci jest dostępna podpowiedź na temat interfejsu, skorzystaj z interfejsu API osiągalności. Mając to na uwadze, nie odmawiaj rozpoczynania prośby na podstawie nieudanej dostępności, ponieważ jest osiągalna.

Powiązane problemy