Я пытаюсь загрузить изображение в базу данных Firebase, но каждый раз, когда я выбираю изображение и пытаюсь его загрузить, я получаю сообщение об ошибке «Тема + 1: Неустранимая ошибка: неожиданно найдено nil при развертывании необязательного значения».
Эта ошибка появилась после того, как я обновил firebase...
func save() {
let newPostKey = ref.key
// save jobImage
if let imageData = jobImage?.jpegData(compressionQuality: 0.5) {
let storage = Storage.storage().reference().child("jobImages/\(newPostKey!)")
storage.putData(imageData, metadata: nil) { (metadata, error) in
if error != nil{
print(error!)
} else {
storage.downloadURL(completion: { (URL, error) in
if error != nil{
print(error!)
return
}
if URL != nil{
let postDictionary = [
"imageDownloadURL" : self.downloadURL!, //-> ERROR (Removing the '!' doesn't give any error, but then also no picture gets uploaded...)
"text" : self.text,
] as [String : Any]
self.ref.setValue(postDictionary)
}
})
}
}
}
}
Я выбираю картинку так:
let newJob = Job(text: jobTextView.text, jobImage: takenImage!)
newJob.save()
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
self.dismiss(animated: true) { [weak self] in
guard let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage else { return }
//Setting image to your image view
self!.takenImage = image
self!.jobImage.image = self!.takenImage //-> The imageVIew gets filled with the takenImage, so I guess that nothings wrong there
self!.changeImage.isHidden = false
self!.addImage.isHidden = true
}
}
Обновлено:
var jobImage: UIImage?
var downloadURL: String?
var jobImage: UIImage?
init(text: String? = nil, jobImage: UIImage? = nil) {
self.text = text!
self.jobImage = jobImage
ref = Database.database().reference().child("jobs").childByAutoId()
}
init(snapshot: DataSnapshot){
ref = snapshot.ref
if let value = snapshot.value as? [String : Any] {
text = value["text"] as! String
downloadURL = value["imageDownloadURL"] as? String
}
}
"Я получаю сообщение об ошибке Thread+1: Неустранимая ошибка: неожиданно найдено nil при развертывании необязательного значения" Где!?
Я обновил вопрос, предоставив код, в котором я установил URL-адрес загрузки, извините за это!
Вы получаете сообщение об ошибке, потому что вы не выполняете безопасное развертывание парня по имени URL.
Но разве тогда я не получил бы ошибку, потому что я не могу безопасно развернуть парня с именем error? @ЭльТомато
if let myURL = URL { let postDictionary = ["imageDownloadURL": myURL, "text": self.text] as [String: Any]}





Вы нигде не устанавливаете self.downloadURL, а значит это nil и приводит к ошибке при попытке развернуть его.
Вы можете установить self.downloadURL внутри обратного вызова:
storage.downloadURL(completion: { (URL, error) in
if error != nil{
print(error!)
return
}
if URL != nil{
self.downloadURL = URL
let postDictionary = [
"imageDownloadURL" : self.downloadURL!,
"text" : self.text,
] as [String : Any]
self.ref.setValue(postDictionary)
}
})
Или вы можете напрямую передать параметр URL в вызов базы данных:
"imageDownloadURL" : URL!
Это означает, что
downloadURLравно нулю. Почему, трудно сказать. Где он установлен?