не всегда вызывается diddeterminestate

#ios #core-location

#iOS #расположение ядра

Вопрос:

У кого-нибудь еще есть проблема с тем, что diddeterminestate не всегда вызывается? Иногда, когда я вызываю

 [self.locationManager requestStateForRegion:region]; 
  

и ничего не происходит. Любопытно, что когда я вставляю точку останова в

 -(void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
  

он начинает работать и вызывается! Мне это кажется очень нестабильным.

Ответ №1:

Я часто сталкивался с этой проблемой, запрашивая состояние региона сразу после его мониторинга.

например

 [self.locationManager startMonitoringForRegion:region];
[self.locationManager requestStateForRegion:region];
  

Я убедился, что didDetermineStateForRegion был вызван путем планирования requestStateForRegion: вскоре после вызова startMonitoringForRegion. Сейчас это не самое лучшее решение, и его следует использовать осторожно, но мне показалось, что оно устранило эту досадную проблему. Приведенный ниже код

 [self.locationManager startMonitoringForRegion:region];
[self.locationManager performSelector:@selector(requestStateForRegion:) withObject:region afterDelay:1];
  

Комментарии:

1. Аааа. Похоже, здесь все борются с одними и теми же ветряными мельницами… Столкнулся с той же проблемой, и это обходное решение — уродливое, признал — исправило его.

Ответ №2:

Возможно, было бы лучше поместить вызов requestStateForRegion внутри метода делегирования didStartMonitoringForRegion. Вероятно, что requestStateForRegion выполняется до фактического запуска мониторинга (который является асинхронным).

 - (void) locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
    NSLog(@"Started Monitoring for Region:n%@",region.description);
    [self.locationManager requestStateForRegion:region];
}
  

Комментарии:

1. всякий раз, когда я вызываю self.LocationManager?.startMonitoring (для: currRegion), в этот раз startMonitoringForRegion вызывал 2 раза.