1

我正在尝试使用 GeoFire 搜索附近的注册位置,如果指定半径内没有,则返回默认值。我的问题是,当 GeoFire 在附近找不到任何东西时,它绝对不会返回任何内容。有不同的方法可以做到这一点吗?

    let geoFire = GeoFire(firebaseRef: DataService().LOC_REF)
    let myLoc = CLLocation(latitude: 10.500000, longitude: -100.916664)
    let circleQuery = geoFire.queryAtLocation(myLoc, withRadius: 100.0)
    circleQuery.observeEventType(GFEventType.KeyEntered, withBlock: {
        (key: String!, location: CLLocation!) in
        self.allKeys[key]=location
        print(self.allKeys.count) //NOT GETTING HERE
        print(key)
        //from here i'd like to use the key for a different query, or determine if there are no keys nearby
            }
        })
    })

提前致谢

4

2 回答 2

4

这就是您如何使用这两个函数来构建键列表,并在列表创建完成时进行监听。

func fetchLocations() {
    keys = [String]()

    let geoFire = GeoFire(firebaseRef: DataService().LOC_REF)
    let myLoc = CLLocation(latitude: 10.500000, longitude: -100.916664)
    let circleQuery = geoFire.queryAtLocation(myLoc, withRadius: 100.0)

    // Populate list of keys
    circleQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in
        print("Key '\(key)' entered the search area and is at location '\(location)'")
        keys.append(key)
    })

    // Do something with list of keys.
    circleQuery.observeReadyWithBlock({
        print("All initial data has been loaded and events have been fired!")
        if keys.count > 0 {
            // Do something with stored fetched keys here.
            // I usually retrieve more information for a location from firebase here before populating my table/collectionviews.  
        }

    })
}
于 2016-05-31T03:52:11.640 回答
1

您需要等待查询报告它已完成。从GeoFire 文档中

有时您想知道所有初始键的数据何时已从服务器加载以及这些键的相应事件已被触发。例如,您可能希望在数据完全加载后隐藏加载动画。GFQuery提供了一种监听这些就绪事件的方法:

query.observeReadyWithBlock({
  println("All initial data has been loaded and events have been fired!")
})
于 2016-05-31T03:07:30.973 回答