El error es: "error fatal: inesperadamente encontrado nil mientras desenvolver un valor opcional"
Estoy haciendo lo siguiente en 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!)
}
}
La verdad es que no entiendo por qué me da error en
imageURL.image = UIImage(data:data!)
cuando ya le he dicho que no proceda si los datos son nulos. No es el problema del enlace. Tampoco hay problema con el "data". He intentado imprimirlo y no era nulo.
Aquí tengo un enfoque desde el que no obtendrá ningún tipo de accidente al descargar la imagen. Ahora actualmente está utilizando el siguiente código:
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!)
}
}
Ahora cambie el código con este, Si usted está continuar con este enfoque:
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")
}
}
Y estoy seguro que si lo usas tu nil crash se solucionará.
Puedes establecer la imagen en la vista de imagen utilizando UIImageView+AFNetworking
Primero arrastra las clases UIImageView+AFNetworking objective c en tu proyecto e importa la clase UIImageView+AFNetworking.h en el archivo de cabecera bridge de tu proyecto. Y utilizar esta línea para establecer la imagen con marcador de posición en imageview. por esto se puede establecer varias imágenes en una vista sin ningún atasco.
yourImageview.setImageWithURL(NSURL(string: self.yourArray.objectAtIndex(indexPath.row).objectForKey("imageurl") as! String), placeholderImage: UIImage(named:"NoUserimage.png"))
Methode
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)
}
})
}
})
}
}
**Uso
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
})