Хорошо, поэтому у меня есть табличное представление, которое, когда представление загружено, заполнено объектами Parse, которые имеют геотоны в пределах заданного диапазона текущего местоположения пользователя. Это работает здесь:Как я могу постоянно обновлять табличное представление на «изменения местоположения»?
let query: PFQuery = PFQuery(className: "Events")
query.whereKey("location", nearGeoPoint: myGeoPoint, withinMiles: range)
query.findObjectsInBackgroundWithBlock { (objects: [PFObject]?, error) in
if error == nil {
print(objects)
for object in objects! {
self.names.append(object["Name"] as! String)
self.descriptions.append(object["description"] as! String)
}
self.tableView.reloadData()
} else {
print(error)
}
}
}
Проблема с этим мне нужно либо иметь эту таблицу reloadData
постоянно или просто при каждом изменении местоположения пользователя, который, я предсказываю, будет происходить довольно часто. Поскольку он должен отображать элементы, находящиеся в пределах диапазона, у меня не может быть диск пользователя где-то, и в таблице все еще отображаются элементы из последнего местоположения.
Для других частей приложения я просто обновил таблицу при нажатии на определенную кнопку, однако мне нужно знать, как правильно обновлять эту таблицу ВСЕГДА или когда изменяется местоположение пользователя. Я попытался использовать таймер, установленный на долю секунды, но это вызвало проблемы и, похоже, не было правильного пути.
Как это сделать? Что касается постоянного обновления таблицы, я пробовал
override func viewDidAppear(animated: Bool) {
self.tableView.reloadData()
}
Но это ничего не делает. Смотрели и на loadObjects()
, но были ошибки. Каков наилучший способ достичь этого?
правок:
if (CLLocationManager.locationServicesEnabled())
{
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()
//locationManager.startUpdatingLocation() //so not always updating
locationManager.startMonitoringSignificantLocationChanges()
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
// locations contains an array of recent locations, but this app only cares about the most recent
// which is also "manager.location"
myLoc = PFGeoPoint(location: manager.location)
print("significant change - \(myLoc)")
tableView.reloadData()
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError!) {
print("failed")
}
Зарегистрируйся, чтобы получать уведомления о важных изменениях местоположения и перезагрузить представление таблицы сразу же, когда приложение находится на переднем плане или установить флаг и перезагрузить представление таблицы, когда приложение выходит на передний план. – vadian
что вы имеете в виду на переднем плане? есть ли определенная функция для вызова? – skyguy
Нет, в AppDelegate есть метод делегата, который вызывается. Я просто хотел указать, что перезагрузка табличного представления, пока приложение неактивно, не имеет смысла. – vadian