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

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


person Erik Batista    schedule 12.08.2017    source источник
comment
Дикая догадка: ваши данные изображения равны нулю.   -  person Glenn Posadas    schedule 12.08.2017
comment
Я просто безопасно развернулся с помощью if let, и он говорит, что imageData не равен нулю   -  person Erik Batista    schedule 12.08.2017
comment
@Glenn данные изображения печатают 233912 байт   -  person Erik Batista    schedule 12.08.2017
comment
Эрик, попробуйте другие методы отладки. Например, добавление точек останова и точек останова исключений.   -  person Glenn Posadas    schedule 12.08.2017


Ответы (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: ...

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

person Paulo Mattos    schedule 12.08.2017
comment
@ErikBatista Приятно знать;) Кстати, обязательно отметьте это как принятый ответ, когда у вас будет шанс, спасибо! - person Paulo Mattos; 13.08.2017