Search code examples
iosswiftfirebaseuiimagepickercontrollerfirebase-storage

fatal when unwrapping UIImage from ImagePicker to Firebase.Storage


Trying to create an image stored in Firebase from UIImagePicker, throws a fatal upon receiving as ImageData is nil. How can the image picker return nil?

func imagePickerController(_ picker: UIImagePickerController,
                           didFinishPickingMediaWithInfo info: [String : Any]) {
    picker.dismiss(animated: true, completion:nil)
    guard let uid = Auth.auth().currentUser?.uid else { return }

        guard let image = info[UIImagePickerControllerOriginalImage] as? UIImage else { return }
        let imageData = UIImageJPEGRepresentation(image, 0.8)
        let imagePath = "\(uid)/\(Int(Date.timeIntervalSinceReferenceDate * 1000)).jpg"
        let metadata = StorageMetadata()
        metadata.contentType = "image/jpeg"
        self.storageRef.child(imagePath)
            .putData(imageData!, metadata: metadata) { [weak self] (metadata, error) in
                if let error = error {
                    print("Error uploading: \(error)")
                    return
                }



    }

Solution

  • Could you remove this line,

        picker.dismiss(animated: true, completion:nil) 
    

    and put it right at the end of your imagePickerController method instead of at the beginning. It seems you are dismissing the picker too early and the image becomes nil as a result.