#swift #xcode #firebase #google-cloud-firestore
# #swift #xcode #firebase #google-cloud-firestore
Вопрос:
Я работаю с Firebase. Когда вы ссылаетесь на документ и пытаетесь изменить / добавить данные, он каждый раз выходит из строя. Это дает мне поток 1: Фатальная ошибка: неожиданно найдено nil при неявном развертывании необязательного значения.
Я пробовал очищать проект и перестраивать его. Я распечатал адрес электронной почты пользователя (который каждый раз дает мне действительный адрес электронной почты). Также определен Chosenbackground . Я не знаю, почему он продолжает сбоить, потому что я не использую необязательный параметр, который равен нулю.
Это то, что я импортирую :
import Foundation
import Firebase
import FirebaseAuth
import FirebaseFirestore
import FirebaseDatabase
import GoogleSignIn
Здесь я определяю db :
var db : Firestore!
Здесь устанавливается chosenBackground и вызывается функция :
@objc func lightBlueAndOrangeImageTapped(tapGestureRecognizer: UITapGestureRecognizer){
print("lightBlueAndOrangeTapped")
// Your action
selectedBackgroundLabel.text = "Light Blue and Orange Background is selected"
chosenBackground = "lightBlueAndOrange"
chosenBackgroundToFirebase()
}
Это функция :
func chosenBackgroundToFirebase(){ //IN THIS FUNCTION IT CRASHES
if let userEmail = Auth.auth().currentUser?.email {
print("(userEmail)")
print("(chosenBackground)")
let newDocRef = db.collection("customizeDatabase").document("(userEmail)") //ERROR ON THIS LINE
newDocRef.updateData([
"background": "(chosenBackground)"
]) { err in
if let err = err {
print("Error updating document: (err)")
newDocRef.setData([
"background" : "(self.chosenBackground)"
])
} else {
print("Document successfully updated")
}
}
}
}
Я хочу иметь возможность читать и писать документ. Большое вам спасибо за помощь 🙂 Я все еще довольно новый разработчик, поэтому вся помощь была очень признательна 🙂 (хотя это довольно глупая ошибка).
Комментарии:
1. На какой линии это происходит?
2. Я добавил, в какой строке он находится 🙂 Это в функции chosenBackgroundToFirebase()
3. Попробуйте
print(db)
перед строкой, на которой происходит сбой. Если это такnil
, то проблема заключается в установкеdb
переменной.4. Вы правы. db равен нулю. Как я мог бы это исправить (и сделать его ненулевым)?
5. @RosalieW как вы инициализируете
db
, прежде чем получить доступ, вы должны установить значение
Ответ №1:
Если вы внимательно посмотрите на код, db
он будет установлен viewDidLoad
.
override func viewDidLoad() {
super.viewDidLoad()
// [START setup]
let settings = FirestoreSettings()
Firestore.firestore().settings = settings
// [END setup]
db = Firestore.firestore()
}
Проблема заключалась в том, что db
было nil
— и из-за этого переменная была принудительно развернута неявно и вызвала сбой, так как не было никакого значения (иначе nil
).