質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

942閲覧

Swift3でURLSessionでConnectできなかった場合のエラー処理

yamayamak

総合スコア131

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/01/28 12:21

Swift3でURLSessionでHTTPアクセスしてます。

以下のようなコードで書いているんですが、サーバがダウンしていた時に
IPも接続できないのですが、エラー処理になりません、
希望はタイムアウトを設定しているので10秒でタイムアウトしてエラー処理かと思っていたのですが、
XCodeで実iPhone機でログを取っているとログは「Could not connect to the server」と出ているのに全然エラー処理(以下の「self.netResponsejob(false)」)になりません。

Connectできなかった場合のエラー処理はどのように記載するのでしょうか?

すみませんが、ご教授ください。

Swift

1 let targetURL: String = "http://hogehoge.com" 2 let encodedURL = targetURL.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed) 3 let url = URL(string: encodedURL!) 4 // 通信用のConfigを生成 5 let urlconfig = URLSessionConfiguration.default 6 urlconfig.timeoutIntervalForRequest = 10 7 urlconfig.timeoutIntervalForResource = 10 8 let session = URLSession(configuration: urlconfig, delegate: self as URLSessionDelegate, delegateQueue: nil) 9 // 通信開始 10 session.dataTask(with: url!) { data, response, error in 11 if error == nil { 12 if let data = data { 13 let resData = String(data: data, encoding: String.Encoding.utf8) 14 if ( (resData?.utf8.count)! > 100 ) { 15 DispatchQueue.main.async { 16 self.netSuccessjob() 17 } 18 } else { 19 DispatchQueue.main.async { 20 self.netResponsejob(false) 21 } 22 } 23 } else { 24 DispatchQueue.main.async { 25 self.netResponsejob(false) 26 } 27 } 28 } else { 29 DispatchQueue.main.async { 30 self.netResponsejob(false) 31 } 32 } 33 }.resume() 34 }

Log

1NSErrorFailingURLKey=http://192.168.8.99:999/r, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=61, NSLocalizedDescription=Could not connect to the server.}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/01/29 02:04

self.netSuccessjob() が実行されているということでしょうか?ステータスコードはどうなってますか?
yamayamak

2018/02/04 12:19

見落としていました。まだ解決しておりません。self.netSuccessjob()もタイムアウトも何も発生せず、ずっと応答が帰ってこない状況です。何か根本が間違っているかもしれませんがわかりません。バグか何かかと考えていました。何かわかりましたらご教授ください。よろしくお願いします。
fuzzball

2018/02/04 17:02 編集

処理の流れのことを聞いているのですが、エラー処理にならないということは、if ( (resData?.utf8.count)! > 100 ) { このif文の中に入って self.netSuccessjob() が実行されているということでしょうか?
yamayamak

2018/02/10 06:24

すみません、亀レスです。もう一度確認しようと思っていましたが環境を戻すのが大変なので、レスします。いえ、何も処理されず戻ってこないように見えてます。
yamayamak

2018/02/10 06:25

処理がどこにも戻ってこない気がします。タイムアウトもせずに。。。
yamayamak

2018/02/10 06:26

ただ、他で同様の処理を書いてるところは正常にタイムアウトしていますので、なぜか原因がわからないですが、おかしなところに何かおかしな設定をしているのかもしれません。
yamayamak

2018/02/10 06:27

この処理で正常に行く時(対向サーバがある時)は正常にself.netSuccessjob() が実行されています。もし、設定などでお気づきがありましたらご連絡をお願いします、
guest

回答1

0

自己解決

私の処理の確認漏れでした。別のところの処理に入っていました。
質問に問題がありました。正常にタイムアウトしてエラー処理に入っていました。
失礼しました。

投稿2018/03/25 04:24

yamayamak

総合スコア131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問