This question already has answers here:
What does “fatal error: unexpectedly found nil while unwrapping an Optional value” mean?
(11个答案)
两年前关闭。
我正在尝试从Firebase存储器下载图像。
当我运行这个代码时
致命错误:在展开可选值时意外找到nil
带
但如果我只运行
谢谢。
其次,你有一个网络电话。在接到那个电话的回复之前,您正在返回thumb,因此thumb为零,但您告诉了我们!那是不可能的,所以你崩溃了。
如果您放置了断点,您应该注意到在您点击
我没有检查过firebase代码,但如果一切正常,这是您想要的顺序。
所以:
所以当你在别的地方叫它:
如果这与你的应用程序的设计模式不匹配,请告诉我。我假设您使用的是tableview,并且这些方法可能在不同的类中。
(11个答案)
两年前关闭。
我正在尝试从Firebase存储器下载图像。
func downloadThumbnail(thumbnail: String) -> URL {
var thumb: URL!
let _ = DataService.dataService.TAG_PHOTO_REF.child("\(thumbnail)").downloadURL { (thumbnailUrl, error) in
if error != nil {
print(error?.localizedDescription as Any)
} else {
thumb = thumbnailUrl
}
}
return thumb
}
cell.photo.kf.setImage(with: downloadThumbnail(thumbnail: selectedTag.thumbnail))
当我运行这个代码时
致命错误:在展开可选值时意外找到nil
带
return thumb
线。但如果我只运行
print(thumbnailUrl)
而不是return,它会打印正确的缩略图url。有人知道我为什么会犯这个错误吗?谢谢。
最佳答案
你不能保证拇指永远不会是零。因此,你不应该使用!。因为您无法控制它,也没有手动设置,所以需要将其设置为可选。
var thumb: URL?
其次,你有一个网络电话。在接到那个电话的回复之前,您正在返回thumb,因此thumb为零,但您告诉了我们!那是不可能的,所以你崩溃了。
如果您放置了断点,您应该注意到在您点击
return thumb
行之前,您将在您的方法上点击if error != nil
。不能对此使用返回,因为该方法总是在从firebase获得响应之前返回,因此您的URL将始终为nil。相反,我会在完成后发送一个URL。我没有检查过firebase代码,但如果一切正常,这是您想要的顺序。
所以:
func downloadThumbnail(thumbnail: String,withCompletion comp: @escaping (URL?, Error?) -> ()) {
let _ = DataService.dataService.TAG_PHOTO_REF.child("\(thumbnail)").downloadURL { (thumbnailUrl, error) in
if error != nil {
print(error?.localizedDescription as Any)
comp(nil, error)
} else {
comp(thumbnailUrl, nil)
}
}
}
所以当你在别的地方叫它:
func getMyImage(cell: UITableViewCell) {
downloadThumbnail(thumbnail: selectedTag.thumbnail) { (thumbnailUrl, error) in
if error != nil {
//show some sort of alert for the user here? or do something to handle the error?
} else {
//the url is an optional URL, so check to make sure it isn't nil
if let url = thumbnailUrl {
cell.photo.kf.setImage(with: url)
} else {
//you didn't get an error from your firebase response
//but the thumbnail url it gave you is broken for some reason
//so again, do something about your error here
}
}
}
如果这与你的应用程序的设计模式不匹配,请告诉我。我假设您使用的是tableview,并且这些方法可能在不同的类中。
关于ios - Firebase存储镜像下载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40878301/
10-13 04:24