gpt4 book ai didi

ios - GeoFire + Swift 3 观察停不下来

转载 作者:可可西里 更新时间:2023-11-01 02:02:42 28 4
gpt4 key购买 nike

我正在使用 GeoFire 并尝试仅获取 3 个满足某些条件的结果。这是我的情况,它不会阻止观察者。有数千个结果,我得到了所有结果,但我只需要 3 个。我基于 this answer但如您所见,它在我的情况下不起作用。请问有人可以帮忙吗?

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 文档:

To cancel one or all callbacks for a geo query, callremoveObserverWithFirebaseHandle: or removeAllObservers:,respectively.

两者都不起作用。

最佳答案

引擎盖下的 Geofire 会触发 Firebase 数据库查询。一次性从 Firebase 检索所有结果,然后在本地为每个结果触发 keyEntered 事件(或 .childAdded 用于常规 SDK)。

调用 removeObserver(withFirebaseHandle: 将阻止 Geofire 检索其他结果。但对于任何已检索的结果,它仍会触发 keyEntered

解决方案是添加一个附加条件来忽略那些已经检索到的结果:

   newRefHandle = gFCircleQuery?.observe(.keyEntered, with: { (key, location) in
if (id <= 3) {
// if key fit some condition
ids += 1
if (ids >= 3) {
self.gFCircleQuery?.removeObserver(withFirebaseHandle: self.newRefHandle!)
completion()
}
}
})

关于ios - GeoFire + Swift 3 观察停不下来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179245/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com