Ich benutze URLSessionTask, um den Quellcode von URL zu erhalten. Wenn das Internet verbunden ist, funktioniert es gut.Wie kann ich URLSessionTask stoppen, wenn das Internet getrennt wird?
Wenn jedoch das Internet getrennt wird, versuche ich zu bauen. Und im Simulator ist es leer und die CPU ist 0%. Was betrifft, ist, dass My Tab Bar Controller
auch fehlt und leer ist (Es ist meine erste Ansicht Controller). Es scheint, dass diese Aufgabe unter Verbindung steht?
Ich möchte die Daten von dataTask erhalten, also verwende ich semaphore
, um es synchron zu machen. Andernfalls, da dataTask eine asynchrone Aktion ist, was ich bekomme, ist eine leere Zeichenfolge.
Wie kann ich dieses Problem beheben?
Danke!
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)
Warum sind Sie eine Semaphore verwenden? – jcaron
Ich möchte die Daten von dataTask erhalten. Andernfalls, da dataTask eine asynchrone Aktion ist, bekomme ich eine leere Zeichenfolge. –
Sie benötigen kein Semaphor: Verwenden Sie einen Abschlusshandler (Callback), um das Ergebnis der asynchronen Operation zu erhalten. – Moritz