Я пытаюсь сохранить изображение в хранилище, получить URL-адрес для этого изображения и затем остановить URL-адрес в поле в базе данных. Проблема в том, что изображение сохраняется, но не информация для документа в базе данных, я пытался отложить часть хранения, но ничего не работает. Я не уверен, если URL-адрес является проблемой или нет, кажется, если изображение уже сохранено, то повторное сохранение документа работает. Вот моя функция: любая помощь или руководство будут оценены (я новичок в кодировании)
@IBAction func submitButtonTapped(_ sender: Any) {
let db = Firestore.firestore()
if let userName = Auth.auth().currentUser?.email {
print(userName)
func validateFields() -> String? {
//Check that all fields are filled in
if mustangNameTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" || blmTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" || roundedUpTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" || bioTextView.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" {
return "Please fill in all fields"
}
return nil
}
let error = validateFields()
if error != nil {
// There is something wrong with the fields, show the error message
let e = error
print("Error in data, \(String(describing: e))")
} else {
//Create cleaned version of the data
var mustangName = mustangNameTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let blm = blmTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let roundedUp = roundedUpTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let bio2 = bioTextView.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let storageRef = Storage.storage().reference().child("Profiles/\(mustangName)")
if let uploadData = self.profileImageView.image!.pngData() {
let metaDataForImage = StorageMetadata()
metaDataForImage.contentType = "image/png"
storageRef.putData(uploadData, metadata: metaDataForImage, completion: { (metadata, error) in
if error != nil {
print(error!)
return
}
print(metaDataForImage)
} )
storageRef.downloadURL { (url, error) in
guard let downloadURL = url?.absoluteString else {
return
}
if url?.absoluteString != "" {
return
} else {
}
print(url!)
print("got url")
db.collection("Profile").document(mustangName).setData(["mustangName": mustangName,"blm": blm, "roundedUp": roundedUp, "bio2": bio2, "userName": userName, "profileImageURL": url?.absoluteString as Any]) {(error) in
if let e = error {
print("Error saving user data to firestore, \(e)")
} else {
print("Successfully saved data for: \(userName)")
}
}
func showError(_ message: String){
self.errorLabel.text = message
self.errorLabel.alpha = 1
}
}
}
}
}
//close profile window and go to home screen
let homeViewController = self.storyboard?.instantiateViewController(identifier: Constants.Storyboard.homeViewController) as? HomeViewController
self.view.window?.rootViewController = homeViewController
self.view.window?.makeKeyAndVisible()
}