我设置数据库结构的方式是这样的:
它以Lists开头,然后有一个孩子显示用户UID然后在里面有一个项目。
每次尝试保存新数据时,UID中的一个项目都会更新。而不是添加另一个项目,相同的项目只是不断变化。我想知道如何在每次添加更多项目时更新相同的项目。
我保存数据的方式是使用这行代码。
let user = FIRAuth.auth()?.currentUser
let item: String = self.ItemTextField.text!
self.ref.child("Lists").child(user!.uid).setValue(["Items": item])
答案 0 :(得分:1)
更惯用的是存储具有所谓推送ID的项目列表:
WindowsFeature [string] #ResourceName
{
Name = [string]
[ Credential = [PSCredential] ]
[ Ensure = [string] { Absent | Present } ]
[ IncludeAllSubFeature = [bool] ]
[ LogPath = [string] ]
[ DependsOn = [string[]] ]
[ Source = [string] ]
}
你这样做是为了:
Lists
twEymn...
-Km....: "Yoghurt"
self.ref.child("Lists").child(user!.uid).childByAutoId().setValue(item)
生成唯一的顺序ID。它类似于数组索引,但是这个可以在多用户环境中以及用户可以脱机时可靠地工作。阅读此blog post about these so-called push ids。
或者,您可以使用项目的名称作为键(如果项目在列表中必须是唯一的):
childByAutoId()
在这种情况下,代码变为:
Lists
twEymn...
"Yoghurt": true
您要注意的一点是,这两种方法只处理新添加的项目,而不是整个项目列表。这是您在使用Firebase时会看到的一般模式。通过隔离您的修改,您的应用程序将更具可扩展性,而无需用户彼此进入。
答案 1 :(得分:0)
问题是您正在设置键值对(" Items":item),以便每次更新相同键的值时。您可以做的是(" Items":[此处的项目数组]),每次都会更新相同密钥的项目列表。
您还可以获取当前的项目列表,在本地附加新项目,然后进行更新。