我知道这是异步。请求,但我已经从上一个viewcontroller
中取了posterPathOfMov
。我不能真正了解问题在哪里。
import UIKit
class DetailMovieController: UIViewController {
//Taken from previous VC but despite posterPathOfMov is not nil I could not request a web service the data
var movieTitle : String!
var descriptionMovie : String!
var posterPathOfMov : String!
let imageOfMovie : UIImageView = {
let img = UIImageView()
img.backgroundColor = .red
img.translatesAutoresizingMaskIntoConstraints = false
return img
}()
let titleOfMovie : UILabel = {
let tit = UILabel()
tit.backgroundColor = .blue
tit.translatesAutoresizingMaskIntoConstraints = false
return tit
}()
let descOfMovie : UILabel = {
let desc = UILabel()
desc.backgroundColor = .yellow
desc.numberOfLines = 20
desc.translatesAutoresizingMaskIntoConstraints = false
return desc
}()
override func viewDidLoad() {
super.viewDidLoad()
//Constraints for the views
setUp()
//Assignments
descOfMovie.text = descriptionMovie
titleOfMovie.text = movieTitle
print(self.posterPathOfMov)
let task = URLSession.shared.dataTask(with: URL(string:"https://image.tmdb.org/t/p/w780(self.posterPathOfMov)")!,completionHandler: { (data, res, err) in
guard let imageData = data else {return}
guard (err == nil) else {print(err!); return}
print("hello2")
DispatchQueue.main.async {
self.imageOfMovie.image = UIImage(data: imageData)
}
});task.resume()
}
控制台日志如下:
/9e2y5q7wlcvnehp5givtjhehx1o.jpg
时出乎意料地发现了无效
致命错误:在解开可选值
您的问题是URL无效。当您将字符串插头隐式拆开时,它在字符串中包含Optional(...)
。您的URL是:
https://image.tmdb.org/t/p/w780Optional("/9E2y5Q7WlCVNEhP5GiVTjhEhx1o.jpg")
那不是有效的URL,因此您的!
崩溃了。
将此代码包裹在if let posterPathOfMov = posterPathOfMov
中以摆脱可选的(或添加??
来解决它)。如果您切换到常规?
选项而不是!
。
首先,除非您肯定不是零:
let task = URLSession.shared.dataTask(with: URL(string:"https://image.tmdb.org/t/p/w780(self.posterPathOfMov)")!
尽管您对self.posterpathofmov中的字符串的假设,但此代码未产生有效的URL。
URL无效的原因是您将pathofmov称为字符串!
这是一个可选的url(字符串:" https://image.tmdb.org/t/p/w780(posterPathofMov)")生产nil。
您可以使用:
解决此问题if let path = posterPathOfMov {
let url = URL(string:"https://image.tmdb.org/t/p/w780(path)")
}
此处清洁程序工作迅速代码:
if let path = self.posterPathOfMov,
let url = URL(string:"https://image.tmdb.org/t/p/w780(path)") {
let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, res, err) in
guard let imageData = data else {return}
guard (err == nil) else {print(err!); return}
print("hello2")
DispatchQueue.main.async {
self.imageOfMovie.image = UIImage(data: imageData)
}
})
task.resume()
}