当我尝试将数据保存到Firebase时,它只会更新现有数据Swift,Firebase

时间:2016-07-10 01:09:15

标签: ios swift firebase firebase-realtime-database

我设置数据库结构的方式是这样的:

它以Lists开头,然后有一个孩子显示用户UID然后在里面有一个项目。

image

每次尝试保存新数据时,UID中的一个项目都会更新。而不是添加另一个项目,相同的项目只是不断变化。我想知道如何在每次添加更多项目时更新相同的项目。

我保存数据的方式是使用这行代码。

let user = FIRAuth.auth()?.currentUser
let item: String = self.ItemTextField.text!
self.ref.child("Lists").child(user!.uid).setValue(["Items": item])

2 个答案:

答案 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":[此处的项目数组]),每次都会更新相同密钥的项目列表。

您还可以获取当前的项目列表,在本地附加新项目,然后进行更新。