微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – Firebase覆盖条目

我是Firebase的新手,不知道如何最好地解释这个,但我会尝试.

我想让我的应用为每个用户创建一个条目.然后,每个用户条目具有多个(0到n)子条目,其中每个子条目是简单的字符串.基本上有一个用户ID(主条目),它们的任务是子条目.

现在我的问题是每当我将数据(子条目)推送到主条目时,所有先前的子条目都被删除,只推送最新的子条目.我一直在仔细查看文档和谷歌搜索,但似乎没有任何工作.

我试过这个:

@IBAction func testWrite(sender: AnyObject) {
    let def = NSUserDefaults.standardUserDefaults()
    let uid = def.valueForKey("uid")
    let root = Firebase(url: getFirebaseURL())

    let text = self.tempText.text!
    let dataRef = root.childByAppendingPath(uid as! String)
    let data = ["test": String(text)]
    dataRef.setValue(data)
}

使用“test”键和“text”的值附加到user-id条目正常

那么我杀了应用程序并将其更改为:

@IBAction func testWrite(sender: AnyObject) {
    let def = NSUserDefaults.standardUserDefaults()
    let uid = def.valueForKey("uid")
    let root = Firebase(url: getFirebaseURL())

    let text = self.tempText.text!
    let dataRef = root.childByAppendingPath(uid as! String)
    let data = ["CHANGED": String(text)]
    dataRef.setValue(data)
}

它推得很好,但之前的条目刚被删除,唯一的条目是这一个.

我想要做的可能是递增(可能有一个数字键?)逐个添加项目而不删除其他条目.

我希望这是有道理的:P和任何帮助都非常感谢!

解决方法

这里发生的是,您将整个分支(Users / UserID ##)设置为一个值,该值是单个节点Changed:< somestring>

从概念上讲,将您想要设置的密钥视为另一个分支可能会有所帮助,例如(Users / UserID ## / TaskID ##)

从概念上讲,而不是像这样接近它:
Users / UserID = Key:Value

像这样接近它:
Users / UserID / Key = Value

注意:在为其分配值之前,不必存在分支Users / UserID / Key.

例如,您可以将您的引用更改为要添加或更改的子项的指向:

let dataRef = root.childByAppendingPath(uid as! String + "/Task001")
dataref.setValue(String(text))

我同意你正在做的是开始学习Firebase的好方法,以及它是如何工作的.但是一旦开始,不要生成并使用自己的密钥作为子任务列表,请查看childByAutoId,它会自动为您创建子项,还有更多,并且更容易管理和编码.

Documentation Here

编辑:建议在下面提到弗兰克的更好答案.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐