Сначала я предполагаю, что запись не завершена после перехода к следующему экрану. Если это действительно причина, вам нужно дождаться завершения записи перед вызовом toHomeScreen()
аналогично тому, как вы уже ждете завершения getDocuments()
перед записью.
@IBAction func weiterButtonTapped(_ sender: Any) {
let error = validateFields()
if error != nil{
//Fehler
showError(error!)
}else{
//Daten aus Textfeld ziehen
let aimedWeight = zielTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let height = groesseTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let weight = gewichtTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let user = Auth.auth().currentUser
let db = Firestore.firestore()
if user != nil{
db.collection("Nutzer")
.whereField("uid", isEqualTo: user!.uid)
.getDocuments { (snap, err) in
if let err = err {
//error
print(err)
}else if snap!.documents.count != 1{
//error later on
}else{
//add data
var document = snap!.documents.first?.data()
document?.updateValue(height, forKey: "Größe") { err in
if let err = err {
print("Error updating document: \(err)")
} else {
print("Document successfully updated")
toHomeScreen()
}
}
}
}
}else{
showError("Fehler")
}
}
Несвязанный: я бы также рекомендовал хранить данные пользователя под UID пользователя, а не под другим автоматически сгенерированным идентификатором. Уникальность идентификаторов UID также гарантируется, и их использование значительно упрощает этот код:
db.collection("Nutzer").document(user!.uid)?.updateValue(height, forKey: "Größe")...