2015-08-09 3 views
7

У меня есть часть кода, который работает, как ожидается, на всех версиях IOS, но не на прошивкой 9:Strange (ошибка?) С Xcode 7/IOS 9 b5 с dataWithContentsOfURL

NSData *response = [NSData dataWithContentsOfURL: [NSURL URLWithString: url] options:NSDataReadingUncached error:&error]; 

Это простой текст JSON ,

Я получил эту ошибку:

Error Domain=NSCocoaErrorDomain Code=256 "The file “xxx.php” couldn’t be opened." UserInfo={NSURL= http://xxx.xxx.com/xxx/xxx.php?lang=fr }

Как это URL может быть intepreted как файл? Response = nil ...

Спасибо.

+0

Опубликовать вопрос на яблочных форумах. –

+0

Я прошу, чтобы убедиться, что я не хотел что-то отсутствует (например: HTTPS обязательным с прошивкой 9) – skrew

ответ

10

Технически это связано с изменениями NSURLSession в сети в iOS9. Чтобы исправить вашу проблему, вам нужно перейти в app.plist приложения. NSAppTransportSecurity [Dictionary] должен иметь ключ NSAllowsArbitraryLoads [Boolean] для установки YES или вызова URL-адресов с помощью https.

Вы можете увидеть больше об изменениях NSURLSession сетевых в iOS9 в http://devstreaming.apple.com/videos/wwdc/2015/711y6zlz0ll/711/711_networking_with_nsurlsession.pdf?dl=1

+1

C & P версия: ' NSAppTransportSecurity \t NSAllowsArbitraryLoads \t ' – bk138

+0

Не делайте этого! Если вы это сделаете, вы по существу одолеете дополнительные функции безопасности «App Transport Security», представленные в iOS9. Вместо этого посмотрите этот ответ: http://stackoverflow.com/a/30836686/505093 – kwahn

+0

Это была помощь huuuuuuge, спасибо! – Mona

0

После отладки в течение 3 часов, я избегал ошибки ALLtogether с помощью асинхронного NSMutableURLRequest, который я также наблюдаемое это способ быстрее, чем синхронная NSData.

let requestURL: NSURL = NSURL(string: url)! 
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL) 
let session = NSURLSession.sharedSession() 
let task = session.dataTaskWithRequest(urlRequest) { 
    (data, response, error) -> Void in 
    if error == nil { 
     var response = UIImage(data:data!) 
    } else { 
     NSLog("Fail") 
    } 
} 
task.resume() 
Смежные вопросы