Swift Firestore数据库不存储数据

Swift Firestore数据库不存储数据,swift,firebase,google-cloud-firestore,Swift,Firebase,Google Cloud Firestore,我已经创建了一个应用程序,当用户注册时,应该在用户文档中的Firestore服务器中创建两个值,即级别和主题(意味着在/users/userid中) 我尝试过手动创建“用户”集合,但用户注册时没有创建任何内容 以下是我的代码(SignUpViewController): 以下代码来自SignUpViewController重定向到的另一个视图控制器(HomeViewController): 我希望当重定向到主页(通过presentInitial进行分段)时,主页将读取“级别”的值。但是,应用程序

我已经创建了一个应用程序,当用户注册时,应该在用户文档中的Firestore服务器中创建两个值,即级别和主题(意味着在/users/userid中)

我尝试过手动创建“用户”集合,但用户注册时没有创建任何内容

以下是我的代码(SignUpViewController):

以下代码来自SignUpViewController重定向到的另一个视图控制器(HomeViewController):


我希望当重定向到主页(通过presentInitial进行分段)时,主页将读取“级别”的值。但是,应用程序因一个致命错误而崩溃:“致命错误:隐式展开可选值时意外发现nil”,其中“level”表示要从服务器读取。

是否检查了数据库规则? 您需要设置何时工作和何时不工作的规则,以便除了您的应用程序之外,没有人可以访问数据库 对于测试,现在使用此代码验证它是否正常,然后您应该更改它


我认为问题不在于Firestore。根据错误消息,代码包装了一个可选值,但失败了,因为它是
nil
,因此问题可能与以下三行有关:

let userDisplayName = textfieldDisplayName.text!
let userEmail = textfieldEmail.text!
let userPassword = textfieldPassword.text!
有时,当
UITextField
没有文本时,它的
text
nil
,而不是
,这可能会导致问题。您可以将这三行替换为以下内容:

let userDisplayName = textfieldDisplayName.text ?? ""
let userEmail = textfieldEmail.text ?? ""
let userPassword = textfieldPassword.text ?? ""
这样,当没有文本时,这三个变量将始终是
,并且检查空白字段的逻辑仍然有效


编辑:供将来参考,真正的问题不在于问题,而在于这个答案的评论。

我的数据库规则似乎很好;读和写都是允许的。要清楚,当你注册时,你在身份验证选项卡中看到你注册的帐户了吗?是的,用户被记录在身份验证选项卡中。从firebase文档中尝试这一行,我认为你的写代码是错误的
self.ref.child(“用户”).child(user.uid)。setValue([“用户名”:用户名])
我已经试过了,但那是针对实时数据库的;消防商店,我相信,是不同的。嗨,我刚刚发现这个,看起来很像,不是吗?这个错误发生在另一个视图控制器中,我之前忘记提到了。请参阅更新的问题;对不起,误会了!什么是
参考
?初始化
reference
时是否使用了变量
uid
reference
是一个变量,如代码中的
var reference:DocumentReference所示文档参考称为。如果不初始化
参考
,它将保持为
nil
。它试图打开到
DocumentReference
,但它是
nil
,因此应用程序崩溃。我已经更改了一些代码,现在可以工作了。非常感谢你的帮助!
{
  "rules": {
    ".read": true,
    ".write": true
  }
}
let userDisplayName = textfieldDisplayName.text!
let userEmail = textfieldEmail.text!
let userPassword = textfieldPassword.text!
let userDisplayName = textfieldDisplayName.text ?? ""
let userEmail = textfieldEmail.text ?? ""
let userPassword = textfieldPassword.text ?? ""