2017-12-27 13 views
0

でのアイテムの削除:「-Kabn1954」ブランチで私はFirebaseに次のデータ持っFirebase

Before Deletion (Link)

を、私は項目「りんご」を削除します。私はこれを行った後、Firebaseデータは次のようになり、しかし

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

After Deletion (Link)

スウィフトを使用して、私はこれを使用して、特定の分岐で、特定のインデックスにある項目を削除しますご覧のとおり、このブランチのデータはインデックス0からインデックス2に直接移動します。このため、エラーが発生します。インデックス1のアイテムが削除されると、残りの2つのアイテムのインデックスが0に続いてインデックスが1になるようにするにはどうすればよいですか?

+0

[そのような場合は、オブジェクトの使用が配列より優先される理由です](https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html)。私は、それが素早く適用可能かどうかは考えていませんが、このリソースは[Synchronized Arrays](https://firebase.googleblog.com/2014/05/handling-synchronized-arrays-with- real.html)。 –

+0

NoSQLデータベースでの配列の使用は避けてください。 [Arrays are Evil](https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html)と[this one](https://stackoverflow.com/)のような回答をチェックしてください//firebase-layout-of-child-data-in-inroid/43191862#43191862)と[this one]ルールオンキー名/ 45804389#45804389)。一般に、childByAutoIdでキーを作成し、それらの親ノード内にkey:valueのペアを格納します。編集可能で、クエリ可能で、サポートするのがずっと簡単です。 – Jay

答えて

0

Firebaseはactually store the data as an arrayではありません。代わりに、あなたが見ているようにインデックスでキー付けされたオブジェクトとして保存します。このガイドでは、配列のような振る舞いが使用されないようにデータの再構成を試みるべきだと示唆しています。

スウィフトAPIがどのように機能するのかわかりませんが、PythonライブラリとJavaScriptライブラリの両方で、親のfoods要素を見れば、配列が得られますスプライスして更新をプッシュできるオブジェクトです。私はも返すことができるAPI indicatesとして、Swiftでもこれが当てはまると思います。

ブログの記事で言及しているように、Firebaseがあなたのためにやってくれないので、インデックスを再作成したいときには配列全体を更新する必要があります。 setValue()accepts anNSArrayであり、これはfoods参照で呼び出すことができる。ここでは競合状態に注意してください。アップデートを失わないように、読み込みと書き込みを1つのトランザクションにカプセル化したいと思うでしょう。

関連する問題