2016-04-17 4 views
0

Я пишу приложение ios, которое полагается на возможность рассказать, когда пользователь подключен к Wi-Fi, и когда он или она подключается или отключается, отправьте асинхронный запрос, используя огонь alamo.Повторите асинхронный запрос, если он не работает?

В первый раз, когда я подключаюсь, мой асинхронный преуспевает.

Однако, после того, как я впервые подключился, любое переключение Wi-Fi в 404s.

Я подозреваю, что это связано с тем, что я отправляю запрос, как только пользователь подключается/отключается, что означает, что на короткое время у него нет интернет-сервиса.

Мой вопрос: могу ли я повторить запрос, если он не работает, или можно «кэшировать» запросы, которые я хочу сделать, и ждать, пока у пользователя будет подключение к Интернету, чтобы сделать их?

ответ

0

Существует множество решений для решения этой проблемы. Одним из них является вызов метода загрузки рекурсивно снова и поэтому реализация механизма автоматического повтора при ошибках:

func downloadSomething() { 
    Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]) 
      .response { request, response, data, error in 
       if let error = error { 
        log(error) 
        self.downloadSomething() // recursive call to downloadSomething 
       } else { 
        // do something on success 
       } 
       } 
} 

Вы можете продлить это следующим образом:

  • показывая пользователю также вид altert спрашивая его, если он хочет-х чтобы повторить попытку загрузки , попробуйте загрузить или нет. (в зависимости от вашей стратегии UI об ошибках сети)
  • указанное количество автоматических повторов и затем спросите пользователя.
  • проверки коды состояния ошибки, а затем в зависимости от кода у различных обработок сетевых ошибок стратегии ...
  • и т.д ...
0

Я думаю, что не нет необходимости заново изобретено яблока код, как reachability или это swiftreachability портирование. Вы можете иметь возможность проверить, если пользователь подключен к сети или Wi-Fi очень легко:

class func hasConnectivity() -> Bool { 
    let reachability: Reachability = Reachability.reachabilityForInternetConnection() 
    let networkStatus: Int = reachability.currentReachabilityStatus().rawValue 
    return networkStatus != 0 
} 

Для подключения Wi-Fi:

(reachability.currentReachabilityStatus().value == ReachableViaWiFi.value) 
Смежные вопросы