我是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,它会自动为您创建子项,还有更多,并且更容易管理和编码.
编辑:建议在下面提到弗兰克的更好答案.