前提
Firebase のリアルタイムデータベースで、あるデータが削除されたかを監視したい
例
削除したいデータが例えば、
{
"data": {
"{child_id}": {
"test_id": 1,
"detail": {
"description": "aaaaaaaaaaa"
}
}
}
}
{child_id}
はfirebaseが自動付与してくれるid。
このとき、削除されたことを監視したいパスが data/{child_id}
だった場合、以下の処理を書いていたらコールバックが2回呼ばれます。
reference.observe(.childRemoved, with: { (snapshot) -> Void in
// 処理
})
snapshotの中身は、1回目がtest_id
で、2回目がdetail
の値になります。
なので2回呼ばれてます。
.ChildRemoved は指定したパスのchildが削除されたときに発火されるので、オブザーブしたいパスを
data/{child_id}/type
にしても、一度もコールバックは呼ばれません。
この場合は、
data/{child_id}/detail
をオブザーブするパスとして指定するのが良いです。
ただし、detail
の下の要素が複数ある場合は、その数だけ呼ばれるので、データの中身を確認しながら、オブザーブの処理をつくらないといけません。