Метод Updatelocations выполняется дважды, вызывая дублирование результатов - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь получить текущее местоположение пользователя с помощью делегата и использовать его в другом классе для вызова API.Каждый раз, когда я отправляю местоположения, это вызывает вызов API.Проблема состоит в том, что делегат в методе didUpdateLocations выполняется дважды для одного и того же местоположения, а затем API возвращает одинаковые результаты дважды, и мне нужно только один раз выполнить вызов, а затем снова, если местоположение резко изменилось.

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
    CLLocation * newlocation = [locations lastObject];
    if (newlocation.horizontalAccuracy < 0) {
        return;
    }
    NSTimeInterval cachedTime = [newlocation.timestamp timeIntervalSinceNow];
    if (fabs(cachedTime) < 120) {
        return;
    } else {
        if (_delegate) {
            [self.delegate sendUserLocationWith: newlocation.coordinate.latitude andLongitude: newlocation.coordinate.longitude];
        }
    }

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

1 Ответ

0 голосов
/ 22 июня 2019

сохранить последнее местоположение и сравнить новое сообщенное местоположение с последним при вызове вашего делегата.

, например

if (fabs(cachedTime) < 120 || CLLocationEqualTo(lastLocation.coordinate,  newLocation.coordinate)) {
  return
}

lastLocation = newLocation;
if (_delegate) {
  [self.delegate sendUserLocationWith: newlocation.coordinate.latitude andLongitude: newlocation.coordinate.longitude];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...