2016-10-23 36 views
5

Używam Alamofire do nawiązania połączenia z serwisem internetowym, który ładuje się dość długo. Jeśli aplikacja trafi w tło, utknę z moim programem ładującym po powrocie do aplikacji. Wyobrażam sobie, że to dlatego, że wywołanie nigdy nie zwraca niczego do mojego programu obsługi zakończenia. Jak mogę rozwiązać ten problem?Żądanie Alamofire zostaje zablokowane podczas wprowadzania tła?

+0

http://stackoverflow.com/questions/34328678/web-service-call-in-background-mode -ios – Sofeda

+0

http://redth.codes/ios7-recipe-background-fetching/ – Sofeda

+0

te mogą ci pomóc – Sofeda

Odpowiedz

4

Możesz użyć pobierania w tle, aby rozwiązać ten problem. Można to zrobić w następujący sposób w Swift 3:

var backgroundTask: UIBackgroundTaskIdentifier? // global variable   

    backgroundTask = UIApplication.shared.beginBackgroundTask(withName: "backgroundTask") { 
     // Cleanup code should be written here so that you won't see the loader 

     UIApplication.shared.endBackgroundTask(self.backgroundTask!) 
     self.backgroundTask = UIBackgroundTaskInvalid 
    } 

Zadzwoń do serwisu alamofire po tej linii. W module obsługi zakończenia zakończ zadanie za pomocą poniższych wierszy.

UIApplication.shared.endBackgroundTask(self.backgroundTask!) 
    self.backgroundTask = UIBackgroundTaskInvalid 

Należy pamiętać, że aplikacja ma trochę czasu tła (backgroundTimeRemaining właściwość) pozostały, zanim wejdzie w stan nieaktywny. Musisz wykonać swoje zadanie przed tym czasem. Program obsługi jest wywoływany na krótko przed upływem pozostałego czasu tła. Ponadto każde wywołanie metody beginBackgroundTask(withName:){} musi być zrównoważone przez pasujące wywołanie do metody endBackgroundTask:.

Aby powyższy kod zadziałał, musisz dostosować ustawienia w swojej aplikacji. Idź do „celów” i kliknij na „Możliwości”, aby wprowadzić następujące zmiany

Changes to made in "Target" section

Po tym, przejdź do pliku Info.plist i otwórz go jako źródło, aby dodać następujący kod.

enter image description here

Mam nadzieję, że to pomaga. Jeżeli chcą Państwo uzyskać bardziej szczegółowe informacje, linki te mogą pomóc