gpt4 book ai didi

ios - Swift 3 "updateChildValues"方法失败,返回 : Invalid key in object. 键必须为非空且不能包含 '.' '#' '$' '[' 或 ']' '

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:36:50 26 4
gpt4 key购买 nike

我正在尝试使用电子邮件作为值来更新 Firebase 数据库。但是 Swift 3“updateChildValues”方法失败并出现错误:对象中的无效键。键必须是非空的并且不能包含“.” '#' '$' '[' 或 ']''代码是:

    let key = emailQueueRef.childByAutoId()
if user.email != nil {
inviteUpdate["\(key)"] = user.email!
}
emailQueueRef.updateChildValues(inviteUpdate)

可能由于电子邮件中的点而失败。另一方面,将其编码为 Base64 并不能解决问题。同时使用“setValue”方法工作:

    emailQueueRef.childByAutoId().setValue(user.email!)

但是这种方法对我来说不太好,因为我同时使用了多条路径。我没有在 Firebase 指南和文档中找到任何有关该案例的信息是 Firebase 错误,还是我误解了什么?

最佳答案

问题是 inviteUpdate 字符串。

该字符串包含非法字符,但不是句点。导致问题。这是 ["(key)"] 部分。

var key 是一个 Firebase DatabaseReference

您尝试写入 Firebase 的 key 如下所示

["https://your_app.firebaseio.com/email_node/-KorK9Io5Y2XejgLInvj": "dude@someemail.com"]

从问题中不清楚实际的 Firebase 结构应该是什么,但我认为你想要的是这个

let key = emailQueueRef.childByAutoId()
if user.email != nil {
inviteUpdate[key.key] = user.email! //note key.key
}

emailQueueRef.updateChildValues(inviteUpdate)

然后将其写入 Firebase

"-KorOLfUa9HvgDIcpIyg": "dude@thing.com"

我要敦促您不要使用电子邮件地址作为 key ,因为它会导致以后的大量工作。

例如,如果用户更改了他们的电子邮件地址。然后,您需要完全删除使用它作为 key 的用户节点,并重新写入它。同时,也必须更改引用该 key 的其他任何地方。

通常将电子邮件作为子节点包括在内会好得多

uid_0
email: "dude@someemail.com"

然后其他区域可以直接引用uid_0。

关于ios - Swift 3 "updateChildValues"方法失败,返回 : Invalid key in object. 键必须为非空且不能包含 '.' '#' '$' '[' 或 ']' ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45038258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com