0
我有一個URLSession.shared.dataTask任務內的封閉調用。 問題是,當我在閉包中設置一個斷點時,它不會完成執行。URLSession.shared.dataTask完成處理程序中的內部封閉
func query(url: String, args: [String:String], completion: @escaping (_ data: Data) -> Void) {
// Create request url in order to query API.
let url = makeGetRequestUsing(url: url, args: args)
let task = URLSession.shared.dataTask(with: url!) { data, response, error in
guard let data = data, error == nil else {
print("error:", error ?? "")
return
}
completion(data)
}
task.resume()
這就是我所說的。
self.comments = []
api.query(url: url, args: args) { data in
let jsonData = try! JSONSerialization.jsonObject(with: data)
print(String(data: data, encoding: .utf8))
if let jsonArray = jsonData as? [[String: Any]] {
// Create comments from the json received.
for i in 0..<jsonArray.count {
do {
self.comments.append(try Comment(json: jsonArray[i]))
} catch {
print(error)
}
}
DispatchQueue.main.async {
self.refreshComments()
}
}
}
我已經在完成處理程序中設置了一個斷點,看起來錯誤來自Comment類的init。
init(json: [String: Any]) throws {
// Get the comment text.
guard let comment = json[Comment.commentText] as? String else {
throw SerializationError.missing(Comment.commentText)
}
// Get userImage.
guard let userId = json[Comment.userId] as? Int,
let userImage = APIData.shared.getImage(url: "/userImageForId", args: ["id": String(userId)]) else {
throw SerializationError.missing(Comment.userId)
}
// Get userename.
guard let resp = APIData.shared.getQuery(url: "/userNameForId", args: ["id": String(userId)]) as? [String: String],
let username = resp[Comment.username] else {
throw SerializationError.missing(Comment.username)
}
self.comment = comment
self.username = username
self.userImage = userImage
}
的的getImage和getQuery是相同的第一代碼。我發起一個任務並等待,直到使用信號量得到結果。
你不是在任何地方調用task.resume() –
我這樣做是在上面的代碼之後。我認爲這裏沒有必要包含它。 – user2232305
jsonData是一個字典或數組的錯誤名稱 –