【问题标题】:Firebase 'setValue' Function Repeats And Does Not Stop SwiftFirebase 'setValue' 函数重复并且不会停止 Swift
【发布时间】:2020-03-10 23:24:30
【问题描述】:

我正在向我的数据库发送整数,应该调用 一次,但正在更新 100 次。数据库很快被填满,仿佛有一个无限循环。

如何调用setValue 函数来上传整数而不使其在循环中重复?有其他方法吗?

let newNumber = self.OldPoints + 20;
print("\(String(newNumber))")
self.databaseRefer.child("Users").child(Name).child("PointsAndConesInfo").child("CurrentPoints").childByAutoId().setValue(newNumber)

【问题讨论】:

  • 你没有真正提供足够的信息让任何人帮助你。这里没有循环,甚至没有定义databaseRefer。请参阅how to create a minimum, complete, reproducible example。如果可能,请确保以 JSON 形式包含数据库中的(最少)示例数据(您可以从控制台导出)。
  • 我想这是在观察节点值变化的处理程序中,而不是观察一次。因此,您在观察处理程序中设置值,这将再次调用观察处理程序,这将再次设置值,这将再次调用观察处理程序,以此类推。你想使用DatabaseReference.observeSingleEvent,而不是DatabaseReference.observe
  • 为什么每个单词都大写?
  • 我认为@DavidChopin 有一个答案。但是,您的问题中没有足够的代码来复制该问题。例如何时/何处调用该代码?您在问题中的任何引用节点上都有观察者吗?请花点时间查看How to create a Minimal, Complete, and Verifiable example

标签: swift firebase firebase-realtime-database


【解决方案1】:

您可能会使用DatabaseReference.observe,然后在其完成处理程序中更新值。 DatabaseReference.observe 将在每次相关值更新时调用。所以如果你观察变化,然后更新同一个引用的值,它会无限循环。

如果您想观察值一次,然后在完成处理程序中更新相同的值,请改用DatabaseReference.observeSingleEvent。这将防止完成处理程序被调用第二次、第三次、第四次,直到无限次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多