2017-06-08 5 views
0

私のビューコントローラからこのobserve関数を呼び出すと、.childaddedのように追加されたビンのみが存在する代わりに、すでに格納されていたオブジェクトが即座に返されます。私は.childchangedでこの機能をしようとすると、それはそれを行うと仮定のように変更しましたが、.chiladdedをやったときに、それだけでデータベースからすべての要求を取得し、これらの要求が既にあっているとき、私は警告を取得Firebase observeEventType .childAddedが約束どおりに動作しない

func observe(callback: RiderVC){ 
    let ref = DBProvider.Instance.dbRef.child("rideRequests") 
    ref.observe(DataEventType.childAdded) { (snapshot: DataSnapshot) in 
    if let data = snapshot.value as? NSDictionary { 
    let drive = cabRide(ritID: ritID, bestemming: bestemming, 
    vanafLocatie: vanaf, taxiID: taxiID, status: status) 
    print(drive) 
    callback.alertForARide(title: "Wilt u deze rit krijgen?", message: "Van: \(vanaf), Naar: \(bestemming)", ritID: ritID) 
    } 
    } 
} 

そこ。

新しいリクエストを追加すると、アラートも表示されます。だから、それは動作しますが、追加されていないリクエストをすでに取り除くことはできますか?

誰かがこの欠陥を知っていますか?

答えて

0

これは、約束どおりに動作しています。ドキュメントから:

アイテムのリストを取得するか、アイテムのリストを追加します。 このイベントは、既存の子ごとに1回トリガーされ、新しい子が指定されたパスに追加されるたびに再び にトリガーされます。リスナーは、新しい子のデータを含むスナップショットを渡した です。

最初は気にならないかもしれませんが、これは一般的にほとんどの開発者が望むものです。基本的にデータベースの特定のブランチからのすべてのデータを要求する方法です。未来。

あなたが説明しているように機能したい場合、アプリケーションの起動後にデータベース内の新しいアイテムを取得しているところでは、ちょっとした作業が必要になります。まず、データベースに追加しているオブジェクトにタイムスタンプを追加する必要があります。そうすれば、それらのタイムスタンプでデータベースを照会するよう求めているときに、何らかの呼び出しをしたいと思うでしょう。おそらく次のようになります:

myDatabaseRef.queryOrdered(byChild: "myTimestamp").queryStarting(atValue: <currentTimestamp>) 

幸運を祈ってください!

関連する問題