SetValue的行为不符合预期

时间:2016-09-19 21:15:25

标签: ios swift firebase swift2 firebase-realtime-database

我在使用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")。这有用吗?

1 个答案:

答案 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)
})