2016-08-15 3 views
1

Хорошо, поэтому у меня есть табличное представление, которое, когда представление загружено, заполнено объектами 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") 
    } 
+0

Зарегистрируйся, чтобы получать уведомления о важных изменениях местоположения и перезагрузить представление таблицы сразу же, когда приложение находится на переднем плане или установить флаг и перезагрузить представление таблицы, когда приложение выходит на передний план. – vadian

+0

что вы имеете в виду на переднем плане? есть ли определенная функция для вызова? – skyguy

+0

Нет, в AppDelegate есть метод делегата, который вызывается. Я просто хотел указать, что перезагрузка табличного представления, пока приложение неактивно, не имеет смысла. – vadian

ответ

0

Установите distanceFilter свойство вашего менеджера местонахождения.

locationManager.distanceFilter = 50 

Теперь он обновит местоположение пользователя только в том случае, если оно изменилось на 50 или более метров.

+0

Хорошо, я сделаю это - можете ли вы посмотрите мои правки и посмотрите, будет ли работать Ive тоже? Кажется, что это не перезагрузка таблицы, хотя она вызывает значительное изменение в местоположении. – skyguy

+0

Что я должен изменить? – skyguy

+0

Я не вижу, что вы добавили это в свое редактирование ... Вы должны поместить его в оператор if. – penatheboss

Смежные вопросы