错误是 "致命错误:在解包可选值时意外发现 nil";
我正在 ViewController 中执行以下操作:
var imageURL:UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string:"http://cdn.businessoffashion.com/site/uploads/2014/09/Karl-Lagerfeld-Self-Portrait-Courtesy.jpg")
let data = NSData(contentsOfURL:url!)
if data!= nil {
imageURL.image = UIImage(data:data!)
}
}
我真的不明白为什么它会在
imageURL.image = UIImage(data:data!)
我已经告诉它如果数据为零就不要继续。 这不是链接的问题。 数据也没有问题。我试着打印了一下,结果并没有为零。
我这里有一种方法,下载图像时不会出现任何形式的崩溃。 现在您使用的代码如下:
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string:"http://cdn.businessoffashion.com/site/uploads/2014/09/Karl-Lagerfeld-Self-Portrait-Courtesy.jpg")
let data = NSData(contentsOfURL:url!)
if data!= nil {
imageURL.image = UIImage(data:data!)
}
}
现在用这段代码更改一下,如果你继续使用这种方法:
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string:"http://cdn.businessoffashion.com/site/uploads/2014/09/Karl-Lagerfeld-Self-Portrait-Courtesy.jpg")
let data = NSData(contentsOfURL:url!)
// It is the best way to manage nil issue.
if data.length > 0 {
imageURL.image = UIImage(data:data!)
} else {
// In this when data is nil or empty then we can assign a placeholder image
imageURL.image = UIImage(named: "placeholder.png")
}
}
我相信,如果你使用了它,你的 nil 崩溃问题就会迎刃而解。
您可以使用 UIImageView+AFNetworking 在图像视图中设置图像。
首先,将 UIImageView+AFNetworking objective c 类拖入您的项目,并在项目的桥头文件中导入 UIImageView+AFNetworking.h 类。然后使用这一行在图像视图中使用占位符设置图像。这样就可以在一个视图中设置多个图像,而不会卡住。
yourImageview.setImageWithURL(NSURL(string: self.yourArray.objectAtIndex(indexPath.row).objectForKey("imageurl") as! String), placeholderImage: UIImage(named:"NoUserimage.png"))
方式
extension UIImage {
/// Loads image asynchronously
///
/// - Parameters:
/// - url: URL of the image to load
/// - callback: What to do with the image
class func loadFromURL(url: NSURL, callback: (UIImage)->()) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), {
let imageData = NSData(contentsOfURL: url)
if let data = imageData {
dispatch_async(dispatch_get_main_queue(), {
if let image = UIImage(data: data) {
callback(image)
}
})
}
})
}
}
用途
let logoUrl = ImageService().buildImageString((self.uiConfig?.headerImage)!, imageMode: .Uniform, size: self.headerImage.frame.size)
UIImage.loadFromURL(logoUrl, callback: { (image: UIImage) -> () in
self.headerImage.image = image
})