LoginSignup
1
2

More than 5 years have passed since last update.

【Firebase】observeEventType の ChildRemoved のコールバックが2度呼ばれる

Posted at

前提

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の下の要素が複数ある場合は、その数だけ呼ばれるので、データの中身を確認しながら、オブザーブの処理をつくらないといけません。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2