我有一个URLSession
被解雇的viewDidLoad
。它返回包含图像URL的JSON。因此,为了获得该图像,我从第一个URLSession
的完成块中调用的JSON Decoder的完成块中直接激发了另一个URLSession
。这是该代码:
//THIS IS CALLED FROM viewDidLoad()
let task = urlSession.dataTask(with: url!) { (data, response, error) in
guard error == nil else {
print ("Error while fetching collections: \(String(describing: error))")
return
}
if let data = data, let string = String(data: data, encoding: .utf8) {
print (string)
URL_Request_Handler.parsingJSON(fromData: data, completion: {(result) in
if let result = result {
print ("JSON IS CONVERTED")
print (result)
//This method creates another session and fires it
self.getFinalCollectionFromResult(result)
}
})
}
}
task.resume()
这是getFinalCollectionFromResult
方法:
private func getFinalCollectionFromResult(_ result: Result_Collection) {
let task = URLSession.shared.dataTask(with: URL(string:result.cover_photo.url)!, completionHandler: { (data, response, error) in
if error != nil {
print("Errror")
}
if let data = data, let image = UIImage(data: data) {
DispatchQueue.main.async {
self.collection = Collection(title: result.title, image: image)
self.collectionViewLayout.collectionView?.reloadData()
}
}
})
task.resume()
}
可以从第一个会话的完成块中创建另一个会话吗?
答案 0 :(得分:1)
是的,这很好。
但是有一个建议:您应该为图像使用downloadTask而不是dataTask。苹果公司说dataTask是为处理少量数据而设计的,而不是像从图像中获取大量数据那样,如果您想在以后添加该功能,downloadTask将使您能够暂停/恢复下载。