我在使用Swift编写的iOS应用中使用Firebase。
static func createUserRecord(uid: String, user: User){
let userDictionary = user.getJSON()
self.usersRef.child(uid).setValue(userDictionary)
}
这个代码在我发布我的应用程序之前工作得很好,在发布应用程序后我再也无法添加用户记录了,应用程序的所有其他功能都运行正常,包括保存和检索一些数据。有人能发现这段代码中的错误吗?
setValue
是否有效,即使路径不存在?例如如果路径a/b/
在那里,我打电话给a/b/c.child('d').setValue("abcd")
。这有用吗?
答案 0 :(得分:2)
如果尚未存在,则调用setValue()
将创建路径。
根据数据库(或您的安全规则),user.getJSON()
似乎更有可能包含无效内容。
您希望attach a completion block检测到这一点。
以下是从StackOverflow文档中执行此操作的示例:
您的阅读操作可能无效的常见原因是因为您的 安全规则拒绝操作,例如因为您没有 经过身份验证(默认情况下,数据库只能由a访问 认证用户)。
您可以在控制台输出中看到这些安全规则违规。但 很容易忽视这些。您也可以在自己的代码中处理它们 并使它们更突出可见,这是特别有用的 在开发期间(因为您的JSON,规则和代码经常更改)。
要检测iOS上的读取失败,您必须实现
withCancel
观察员阻止:ref!.child("notAllowed").observe(.value, with: { (snapshot) in print("Got non-existing value: \(snapshot.key)") }, withCancel: { (error) in print(error) })