swift - 在 Firebase 中删除项目

标签 swift firebase firebase-realtime-database

我在 Firebase 中有以下数据:

Before Deletion (Link)

在“-Kabn1954”分支中,我想删除项目“apple”。使用 Swift,我在特定分支中的特定索引处删除了一个项目,使用这个:

self.ref.child("-Kabn1954").child("foods").child("1").removeValue()

但是,在我这样做之后,Firebase 数据看起来像这样:

After Deletion (Link)

如您所见,此分支中的数据现在直接从索引 0 转到索引 2。因此,我得到一个错误。我怎样才能使索引为 1 的项目被删除时,剩下的两个项目的索引为 0,后跟索引为 1?

最佳答案

Firebase 不会 actually store the data as an array ,而是在您观察时将其存储为由索引键控的对象。该指南建议您应该尝试重构数据,以便不使用类似数组的行为。

如果那不可能或真的不可取,我不知道 Swift API 是如何工作的,但是在 python 和 JavaScript 库中,如果您观察父 foods 元素,你会得到一个数组对象,你可以拼接它并推送更新。我猜这在 Swift 中也是如此,因为 API indicates NSArray 也可以返回。

正如博文中提到的,当您想要重新编制索引时,您需要更新整个数组,因为 Firebase 不会为您做这件事。 setValue() accepts an NSArray 可以在 foods 引用上调用。请注意此处的竞争条件,您需要将读取和写入封装到单个事务中以避免丢失更新。

关于swift - 在 Firebase 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47987423/

相关文章:

ios - 我应该从 UIViewController 中的 firebase 加载数据到哪里

ios - 如何制作可扩展的 UITableView 标题?

firebase - 有没有办法抑制 Firebase Functions Firestore 触发器?

android - 谷歌云功能 : edit Firebase node at a specific time

swift - Carthage:打开模块的导入文件 * 权限被拒绝

ios - 无法在 Swift 中索引空缓冲区

android - 将 long 转换为 Double 时遇到问题

javascript - AngularFire:返回 $value

javascript - firebase div Id 未显示 onclick

javascript - Firebase 数据库 : how to resolve a Promise and keep listening to Firebase DB changes