Приложение Swift вылетает при загрузке изображения в 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 Коала [17914: 491998] * Завершение работы приложения из-за необработанного исключения "NSInvalidArgumentException", причина: '* - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: попытка вставить нулевой объект из объектов [1]' *** Первый стек вызовов вызовов:

Я не знаю, что пытается сказать это сообщение об ошибке, может быть, изображение, которое пытается загрузить, равно нулю? Я не уверен.

1 ответ

Решение

Похоже, вы забыли использовать только что созданный дочерний узел хранения. Поэтому попробуйте заменить этот код:

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: ...

Это изменение должно исправить вашу текущую проблему;)

Другие вопросы по тегам