错误是:“致命错误:在解包可选值时意外发现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!)
虽然数据为零,但我已经告诉它不要继续 . 这不是链接的问题 . “数据”也没有问题 . 我试着打印它,它不是零 .
15 回答
该错误很可能是
imageURL
为零 . 您是在代码中的其他位置为其分配值,还是在实际代码中实际为@IBOutlet
?如果你没有为它赋值,它将是nil - 但它的UIImageView!
的类型意味着它是"implicitly unwrapped optional",这意味着编译器赢得了't stop you using it even if it is nil, but will crash at runtime with the error you' .其余的代码是正确的(假设在
!=
之前缺少空格是编译代码中没有的错误),但你最好使用if let
解包你的选项而不是检查nil
然后使用force-unwrap运算符:如果您碰巧使用Swift 1.2测试版,可以将两个ifs组合在一起:
或者,如果您愿意,请使用
flatMap
:这是我的代码可能会帮助你
斯威夫特2:
斯威夫特3:
用法
如果您使用HTTP连接而不是https,请不要忘记添加此项
App Transport Security Settings
作为字典并进入Allow Arbitrary Loads
作为布尔值YES
如下图在这里,我有一种方法,在下载图像时,您不会遇到任何类型的崩溃 . 现在您正在使用以下代码:
现在用这个改变代码,如果你继续这种方法:
而且我相信如果您使用它,您的零崩溃将会得到解决 .
您可以使用SDWebImage从URL https://github.com/rs/SDWebImage显示图像
试着写:
代替:
编译器可能会将感叹号与操作混淆,以解开可选值 .
You can set image in image view by using UIImageView+AFNetworking
首先,在项目中拖动UIImageView AFNetworking目标c类,并在项目的桥头文件中导入UIImageView AFNetworking.h类 . 并使用此行在imageview中使用占位符设置图像 . 通过这种方式,您可以在视图中设置多个图像而不会卡住 .
Swift 3: (本例中的图像是64位二进制数据)
Swift 3.0用于下载图像并使用URLSession和URLRequest解析json .
你的代码是对的,只需使用:
您使用 Alamofire 的可能性非常大,如果是这样,它很简单:
这是它的代码 . 我用过这个你不需要包含类或其他任何内容 . 只需使用此扩展程序 . 这非常快 .
问题是在viewDidLoad中,imageURL UIImageView可能尚未设置 . 如果UIImageView为零,我会使用可选链接
imageURL?.image = UIImage(data:data!)
我在viewDidLayoutSubviews()处设置了UIImageView的图像,此时你确定已经设置了ViewController的出口 .
我这样做的方式如下:
这将返回一个可选值 . 看看它的描述 . 它说
An NSURL object initialized with URLString. If the URL string was malformed, returns nil.
在您的代码中,您尝试
url!
,只要url的值为nil就会崩溃 .Methode
}
Usage