ダーヤス.com プレミアム

ダーヤス.comにようこそ。プレミアムな情報で、ワークライフバランスの充実を図りませんか。

【Swift】【iOS】NSURLRequestでダウンロードする際のエラー対処法

   

NSURLRequestのエラー

【Xcode】【Swift】NSJSONSerializationのエラー”use of unresolved identifier”,”Extra argument ‘Error’ in call”のところで、Xcode7,iOS9を使った時に出るエラーとして、ローカルファイルを取り込んで表示する際に出るエラーの対処方法についてメモしましたが、今度はインターネットからデータをダウンロードする際のことについて。

参考としてデータをダウンロードするiPhoneアプリ開発を使わせていただいています。

まずここの同期ダウンロードのコードをそのまま打ち込むと、

if let resData:NSData = NSURLConnection.sendSynchronousRequest(request,
            returningResponse: nil, error: &error){
}

のところでエラーが出ると思います。
"Extra argument 'error' in call"というエラーが。

これは例によってtryを使うこととdo{}catch{}でエラー処理を行うようにして、

        do {
            let resData:NSData = try NSURLConnection.sendSynchronousRequest(request, returningResponse: nil)
            let myData = NSString(data:resData, encoding: NSUTF8StringEncoding) as! String
            myTextView.text = myData
            print("読み込み後の処理")
        } catch{
            print("error")
        }

こんな感じにすればうまくコンパイルできるようになります。
"var error: NSError?"は不要になりますね。

しかしながらデバッグエリアを見ると、

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

というメッセージが表示されて、うまくリンク先のデータが取れていない模様。
どうもセキュアな通信が保証されていないリンク先にはデフォルトではアクセスできないということ?(httpsとかなら大丈夫なのでしょうかね)

これの対処がわからなかったので、【Xcode7,iOS9】エラー解決:App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.こちらの記事にお世話になりました。
大変助かります。

これで解決できました。

あと、"'sendSynchronousRequest(_:returningResponse:)' was deprecated in iOS 9.0: Use [NSURLSession dataTaskWithRequest:completionHandler:] (see NSURLSession.h"というアラートが出ますが、まあエラーじゃなくて警告だし、対処法もよくわからなかったのでとりあえず無視で大丈夫そうです。

 - アプリ開発