【发布时间】: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