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

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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...