【问题标题】:Swift - libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)Swift - libc++abi.dylib:以 NSException (lldb) 类型的未捕获异常终止
【发布时间】:2018-12-11 03:30:48
【问题描述】:

我正在制作一个应用程序,您可以在其中上传照片,然后它获取的是 downloadURL 并将其保存在数据库中,但在将链接保存到数据库之前我收到错误。

*** 由于未捕获的异常“FIRInvalidArgumentException”而终止应用程序,原因:“不支持的类型:NSURL(在字段链接中找到)”

。 . .

libc++abi.dylib:以 NSException (lldb) 类型的未捕获异常终止

线程 1:信号 SIGABRT

我似乎无法理解为什么。

谢谢

    import UIKit
    import Firebase
    var docRefIm: DocumentReference!
    var docRefImC: CollectionReference!

    class carregar: UIViewController,UINavigationControllerDelegate, UIImagePickerControllerDelegate {
        @IBOutlet weak var upload: UIButton!
        @IBOutlet weak var myImage: UIImageView!
        @IBAction func uploadBt(_ sender: Any) {

            let image = UIImagePickerController()
            image.delegate = self
            image.allowsEditing = true
            image.sourceType = UIImagePickerControllerSourceType.photoLibrary
            self.present(image, animated: true){

            }
        }
        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

            var selectedImage: UIImage?

            if let editedImage = info[UIImagePickerControllerEditedImage] as? UIImage {
                myImage.image=editedImage
                selectedImage = editedImage
            } else if let image = info[UIImagePickerControllerOriginalImage] as? UIImage
            {
                myImage.image=image
                selectedImage = image
            }
            self.dismiss(animated: true, completion: nil)
            let storageRef = Storage.storage().reference()
            let imageName = NSUUID().uuidString
            let fullImageRef = storageRef.child("casamentoMR/\(imageName).jpeg")
            let compImageRef = storageRef.child("casamentoMR/compressed/\(imageName).jpeg")
            let newMetadata = StorageMetadata()
            newMetadata.contentType = "image/jpeg";
            if let uploadDataComp = UIImageJPEGRepresentation(myImage.image!, 0.15){
                compImageRef.putData(uploadDataComp, metadata: newMetadata, completion: { (metadata, error) in
                    if error != nil {
                        print(error)
                        return
                    } else {
                    compImageRef.downloadURL { (url, error) in
                        guard let downloadURL = url

                            else {
                            // Uh-oh, an error occurred!
                            return
                        }
                        docRefImC = Firestore.firestore().collection("Imagens")
                        docRefImC.getDocuments() { (querySnapshot, err) in
                            if let err = err {
                                print("Error getting documents: \(err)")
                            } else {
                                for document in querySnapshot!.documents {
                                    print("\(document.documentID) => \(document.data())")
                                    id += 1
                                }
                                docRefIm = Firestore.firestore().collection("Imagens/").document(String(id))
                                docRefIm.setData([
                                    "Link": downloadURL,
                                    "ID": id+1
                                ]) { err in
                                    if let err = err {
                                        print("Error writing document: \(err)")
                                    } else {
                                        print("Document successfully written!")
                                    }
                                }
                            }
                        }
                        }}

                })
            }
            if let uploadData = UIImageJPEGRepresentation(myImage.image!, 0.7){
                fullImageRef.putData(uploadData, metadata: newMetadata, completion: { (metadata, error) in
                    if error != nil {
                        print(error)
                        return
                    }                 
                })
            }

        }

        func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
            dismiss(animated: true,completion: nil)
        }
        override func viewDidLoad() {
            super.viewDidLoad()
    view.setGradientBackground(colorOne: Colors.MarPink, colorTwo: Colors.AzRui)
            // Do any additional setup after loading the view.
        }

        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }

【问题讨论】:

  • 你能给出整个错误信息吗?它应该以“终止于”(带有大写“t”)开始,直到你给出的那个?即使您已经回答了您的问题,您给出的错误信息也缺少重要且有意义的部分。
  • 是的,你写的。我现在去更新一下
  • 你看,这条消息是说键 Link 的值是一个 NSURL 值,它不应该。通过阅读文档很容易阅读/理解并快速修复

标签: ios swift google-cloud-firestore


【解决方案1】:

只需添加通过更改将URL更改为字符串

                                "Link": downloadURL,

"Link": downloadURL.absoluteString,

【讨论】:

    猜你喜欢
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 2017-05-25
    • 1970-01-01
    相关资源
    最近更新 更多