1
URLSessionTaskを使用してURLのソースコードを取得しています。インターネットが接続されているとうまく動作します。インターネットが切断されているときにURLSessionTaskを停止するにはどうすればよいですか?
しかし、インターネットが切断されると、私はビルドしようとします。シミュレータでは空白で、CPUは0%です。影響を受けるのはMy Tab Bar Controller
もなくなって空白(私の最初のビューコントローラ)です。このタスクは接続されているようですか?
私はdataTaskから受信したデータが必要なので、私はそれを同期させるためにsemaphore
を使用します。さもなければ、dataTaskが非同期アクションであるので、私は何か は空の文字列です。
この問題を解決するにはどうすればよいですか?
ありがとうございます!
let urlString:String="http://www.career.fudan.edu.cn/jsp/career_talk_list.jsp?count=50&list=true"
let url = URL(string:urlString)
let request = URLRequest(url: url!)
let session = URLSession.shared
let semaphore = DispatchSemaphore(value: 0)
let dataTask = session.dataTask(with: request,
completionHandler: {(data, response, error) -> Void in
if error != nil{
errorString = "Error!"
}else{
htmlStr = String(data: data!, encoding: String.Encoding.utf8)!
//print(htmlStr)
}
semaphore.signal()
}) as URLSessionTask
//start task
dataTask.resume()
_ = semaphore.wait(timeout: DispatchTime.distantFuture)
なぜあなたは、セマフォを使用していますか? – jcaron
dataTaskから受け取ったデータが必要です。それ以外の場合は、dataTask が非同期アクションであるため、空の文字列を取得します。 –
セマフォーは必要ありません。完了ハンドラー(コールバック)を使用して、非同期操作の結果を取得します。 – Moritz