Swift 将图片上传到 Firebase 时应用崩溃

Swift app crashes when uploading image to firebase

我正在尝试获取所选视频的缩略图。

它似乎确实创建了缩略图,但在将其上传到 firebase 时崩溃了

我相信它会在 thumbnailStorageRef 崩溃。

相关代码如下:

guard let imagePickerUrl = info[UIImagePickerControllerMediaURL] as? URL else { return }
let videoUrl = imagePickerUrl

// Generate image thumbnail.

let asset: AVAsset = AVAsset(url: videoUrl as URL)
let imageGenerator = AVAssetImageGenerator(asset: asset)
imageGenerator.appliesPreferredTrackTransform = true
var time = asset.duration
time.value = min(time.value, 3)

do {
    let thumbnailImage = try imageGenerator.copyCGImage(at: time , actualTime: nil)
    let image = UIImage(cgImage: thumbnailImage)
    let imageData = UIImagePNGRepresentation(image)!

    let thumbnailStorageRef = FIRStorage.storage().reference()
    thumbnailStorageRef.child("thumbnails/" + randomString(length: 20) + ".png")

    thumbnailStorageRef.put(imageData, metadata: nil, completion: { (thumbnailMeta, error) in
        if error != nil {
            print("An error has occured while uploading thumbnail:",error ?? "")
        } else {
            print("Thumbnail upload to database was successfull", thumbnailMeta?.downloadURL() ?? "")
        }
    })
} catch {
    print("An error has occurred while making thumbnail:")
}

崩溃时错误控制台显示:

2017-08-11 17:19:08.656 Koala[17914:491998] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1]' *** First throw call stack:

我不知道这个错误消息想表达什么,也许是试图上传的图片是 nil?我不确定。

您似乎忘记使用刚刚创建的 child 存储节点。因此,尝试替换此代码:

thumbnailStorageRef.child("thumbnails/" + randomString(length: 20) + ".png")
thumbnailStorageRef.put(imageData, metadata: nil, completion: ...

改为:

let imageRef = thumbnailStorageRef.child("thumbnails/" + randomString(length: 20) + ".png")
imageRef.put(imageData, metadata: nil, completion: ...

此更改应该可以解决您当前的问题;)