我目前有一个正在运行的函数,当添加到表视图中时,它将新的GoalItem
插入我的Firebase数据库中。
func save(_ goalItems: [GoalItem]) {
let ref = Database.database().reference()
let goalRef = ref.child("goals").childByAutoId()
for goalItem in goalItems {
let attributes = ["iconName": goalItem.iconName, "text": goalItem.text, "user": self.email]
goalRef.setValue(attributes)
}
}
但是,当用户编辑其“GoalItem”时,也会在其中调用
save
,从而导致该项目被复制。本质上,当
text
的GoalItem
属性最初等于数据库的“文本”引用(它是“目标”引用的子代)时,我正在寻找一种避免条目重复的方法。我猜是这样的:
if goalItem.text == (value of Firebase's text reference) {
(update the text reference)
else {
goalRef.setValue
访问数据库的“文本”引用以获取值并将其与
goalItem.text
进行比较是我目前遇到的问题。数据库的结构非常简单-下图。数据库
TLDR;需要访问特定的数据库子级引用和更新(而不是覆盖)
先感谢您!
最佳答案
注意您的保存功能中的这一行:
let goalRef = ref.child("goals").childByAutoId()
childByAutoId()
是生成包含您的目标对象的一长串随机字符的原因。由于您是在更新时调用它,因此它也在创建一个新的目标对象。因此,您需要为每个现有目标保留此自动ID。而且,如果您要编辑特定的目标对象,则此引用应为:
// assuming you have a goal object that holds onto its ID
let goalRef = ref.child("goals").child(goal.id)
关于ios - 避免在Firebase中重复输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46935670/