私はGeoFireを使用していて、いくつかの条件を満たす3つの結果しか取得しようとしていません。これは私の場合であり、観察者を止めることはありません。何千もの結果がありますが、私はそれをすべて手に入れますが、私は3だけしか必要としません。this answerに基づいていますが、わかるように私の場合はうまくいきません。 誰か助けてもらえますか?GeoFire + Swift 3は観測を停止できません
var newRefHandle: FIRDatabaseHandle?
var gFCircleQuery: GFCircleQuery?
func findFUsersInOnePath(location: CLLocation,
radius: Int,
indexPath: String,
completion: @escaping() ->()){
var ids = 0
let geofireRef = usersRef.child(indexPath)
if let geoFire = GeoFire(firebaseRef: geofireRef) {
gFCircleQuery = geoFire.query(at: location, withRadius: Double(radius))
newRefHandle = gFCircleQuery?.observe(.keyEntered, with: { (key, location) in
// if key fit some condition
ids += 1
if (ids >= 3) {
self.gFCircleQuery?.removeObserver(withFirebaseHandle: self.newRefHandle!)
completion()
}
})
gFCircleQuery?.observeReady({
completion()
})
}
、Optionalsに気にしないでくださいそれだけでGoeFireのドキュメントから、この例のコード
ためである(?):
を呼び出し、地理クエリのための1つまたはすべてのコールバックをキャンセルするにはremoveObserverWithFirebaseHandle:またはremoveAllObservers :,それぞれ 。
どちらも機能しません。
感謝を:
ソリューションは、これらのすでに取得結果を無視するように条件を追加することです! 1-3の結果を得るたびに、何千ものオブジェクトをダウンロードしてもらえますか? –
あなたは、あなたの範囲内にあるアイテムをダウンロードするための支払いを行います。特定の数のキーを含む最小範囲が必要な場合、この方法は理想的ではありません。キーが発射される順序は、クエリの中心までの距離に基づくのではなく、クエリの範囲の1つのコーナーからのものです。小さな範囲のクエリから始めて、十分な結果が得られなかった場合は、より広い範囲で別のジオクエリを実行する方がよいでしょう。 –
私は参照してください。どうもありがとうございました。 –