【问题标题】:Swift app crashes when uploading image to firebase将图像上传到 Firebase 时,Swift 应用程序崩溃
【发布时间】:2017-08-12 13:39:22
【问题描述】:

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

它似乎确实创建了缩略图,但在将其上传到 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] * 终止应用程序由于 未捕获的异常 'NSInvalidArgumentException',原因:'* -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: 尝试从 objects[1] 插入 nil 对象' *** 首先抛出调用栈:

我不知道这个错误信息想说什么,也许尝试上传的图像是 nil?我不确定。

【问题讨论】:

  • 大胆猜测:你的 imageData 是 nil。
  • 我刚刚用 if let 安全地打开包装,它说 imageData 不是 nil
  • @Glenn 图像数据打印“233912 字节”
  • Erik,尝试进一步的调试方法。比如添加断点和异常断点。

标签: ios swift firebase firebase-storage invalid-argument


【解决方案1】:

您好像忘记使用刚刚创建的 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: ...

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

【讨论】:

  • @ErikBatista 很好,很高兴知道 ;) 顺便说一句,如果有机会,请务必将其标记为已接受的答案,谢谢!
猜你喜欢
  • 2019-04-07
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 2023-02-02
  • 2017-06-12
  • 1970-01-01
  • 2017-03-08
相关资源
最近更新 更多