私は GeoFire を使用して、ユーザーがアプリで設定して FireBase に保存できる特定の半径を検索しています。ページが読み込まれると、GeoFire クエリを実行する前に、Firebase から半径を取得しています。ただし、以下のコードを実行すると、次のエラーが表示されます: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Precision must be less than 23!'
戦略的に配置されたいくつかの print ステートメントをいじってみると、GeoFire クエリが実行されるまでに searchRadius が 0 として返されているように見え、非同期読み込みが行われているのではないかと思いました。
私の質問は、searchRadius が 0 であるためにこのエラーが発生しているのかということです。その場合、ユーザーの検索半径を取得する FireBase ブロックが GeoFire クエリの前に実行されるようにするにはどうすればよいですか?
self.ref.childByAppendingPath("users/\(self.ref.authData.uid)/searchRadius").observeEventType(.Value, withBlock: { snapshot in
self.searchRadius = snapshot.value as! Double
})
let center = CLLocation(latitude: 37.331469, longitude: -122.029825)
let circleQuery = geoFire.queryAtLocation(center, withRadius: self.searchRadius)
circleQuery.observeEventType(GFEventTypeKeyEntered, withBlock: { (key: String!, location: CLLocation!) in
//Do code for each result returned
}) //End GeoFire query