Я новичок в GeoFire. Я хотел бы получить некоторые отзывы при получении ближайших постов.
Мои вопросы:
1) Строка базы данных Geofire имеет опционально (""). Это причина, по которой я не могу получить свой пост, так как есть дополнительная строка, такая как «Необязательно (»)? Если это так, есть ли способ его удалить?
2) Что за строка в g: что-то, что я должен включить в свой почтовый узел?
3) Я не могу получить сообщения из следующего кода. «print (self.keyArray.count)» и «print (distance as Any)» работают нормально. Тем не менее, он показывает «null», когда я пытаюсь напечатать snapshot.value после «POSTS_REF ....». Может ли кто-нибудь предложить мне метод извлечения ближайших сообщений?
Мой узел Geofire на Firebase выглядит следующим образом:
String in Optional ("") - мой postId.
Моя логика в соседнем посте:
1, определить мое текущее местоположение:
func determineMyCurrentLocation() {
locationManager.startUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
locationManager.stopUpdatingLocation()
if(currLocation == nil)
{
currLocation = locations.last
self.fetchNearbyPost()
}
else{
print("trying to update")
}
}
2, я получаю следующие сообщения:
func fetchNearbyPost() {
self.posts.removeAll()
self.keyArray.removeAll()
circleQuery = geoFire.query(at: currLocation, withRadius: 1000)
var distanceArray = [Double]()
circleQuery.observe(.keyEntered) { (key: String!, location: CLLocation!) in
self.keyArray.append(key)
}
self.dispatchGroup.enter()
circleQuery.observeReady {
if(self.keyArray.count > 0)
{
for index in 0...self.keyArray.count-1{
self.geoFire.getLocationForKey(self.keyArray[index], withCallback: { (keyLocation, error) in
print(self.keyArray.count)
let distance = keyLocation?.distance(from: self.currLocation)
distanceArray.append(distance!)
print(distance as Any)
})
POSTS_REF.child(self.keyArray[index]).observeSingleEvent(of: .value, with: { (snapshot) in
var post = Post(snapshot: snapshot)
post.distance = distanceArray[index]
self.posts.append(post)
if(self.keyArray.count == self.posts.count)
{
self.dispatchGroup.leave()
}
})
})
}
}
else
{
self.dispatchGroup.leave()
}
}
dispatchGroup.notify(queue: .main) {
self.posts = self.posts.sorted(by: { $0.distance < $1.distance })
self.collectionView.reloadData()
self.currLocation = nil
}
}