NSHTTPURLResponse код состояния 200 в режиме полета

У меня есть интересная проблема: когда мое устройство находится в режиме полета, код состояния HTTP, который NSHHTPURLResponse обеспечивает это 200 "ХОРОШО".

Не должно ли это произойти с ошибкой или, по крайней мере, не ответить, что у него есть действительное соединение с кодом 200?

Вот фрагмент моего кода:

let url = NSURL(string: "http://apple.com");

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
    if(error == nil){
        let statusCode = (response as! NSHTTPURLResponse).statusCode;
        if(statusCode == 200){
            println("All Good");
        }
    }
}
task.resume();

В режиме "В самолете" печатается "Все хорошо"

1 ответ

Кажется, вы получаете кешированный ответ. Прочтите эту статью.

.reloadIgnoringLocalCacheData

должен решить вашу проблему, если это причина.

политика кеширования

Не проверяйте ошибку, проверьте возвращенные данные. Ошибка (NSError, ErrorType) используется для возврата ошибок из обратного вызова (inout).

Код ниже работает для меня.

Я отредактировал его с идиоматическим синтаксисом Swift:

let urlPath = "https://www.google.com/"
let url = NSURL(string: urlPath)
let session = NSURLSession.sharedSession()

let task = session.dataTaskWithURL(url!) { data, response, error in
    if data != nil {
        NSLog("%@", NSString(data: data!, encoding: NSUTF8StringEncoding)!) // EDIT
        let res = response as? NSHTTPURLResponse
        if res?.statusCode == 200 {
            NSLog("All Good")
        }
    }
}

task!.resume()
Другие вопросы по тегам