Остановить возврат кэшированного расположения CLLocationManager - PullRequest
5 голосов
/ 14 февраля 2010

Мне интересно, есть ли какой-нибудь способ сделать это так, чтобы CLLocationManager автоматически не возвращал кэшированное местоположение. Я понимаю, что в документах говорится: «Служба определения местоположения возвращает начальное местоположение как можно быстрее, возвращая кэшированную информацию, когда она доступна», но это кэшированное местоположение может быть очень далеко от текущего местоположения пользователя, и я хотел бы, чтобы оно было более точным, если это возможно.

Спасибо за любую помощь!

Ответы [ 4 ]

13 голосов
/ 15 февраля 2010

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

Метка времени местоположения является NSDate, поэтому просто получите значение [NSDate date] при запуске приложения и используйте его в качестве ориентира при фильтрации местоположений. Вы можете даже выбросить контрольное значение, как только начнете получать новые данные, и рассматривать нулевую контрольную дату как подразумевающую, что новым местоположениям следует доверять.

6 голосов
/ 11 апреля 2011
-(void)locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation *)oldLocation 
{
    if ([newLocation.timestamp timeIntervalSinceNow] > -10.0) // The value is not older than 10 sec. 
    { 
         // do something 
    } 
 }
0 голосов
/ 14 февраля 2010

Смотрите мой ответ здесь: Как удалить кеш-память? о "как удалить кеш размещения". это должно решить вашу проблему с кешем CLLocationManager.

0 голосов
/ 14 февраля 2010

Вы можете использовать это свойство CLLocationManager:

@property(readonly, NS_NONATOMIC_IPHONEONLY) CLLocation *location;

Значение этого свойства равно nil, если данные о местоположении никогда не были получены, в противном случае CoreLocation кэширует свои данные. Поэтому, если вы всегда хотите начать с нуля, просто проверьте, является ли это свойство nil или нет. Если это nil, тогда ты в порядке; в противном случае вам необходимо остановить менеджер местоположений и запустить его снова: это приведет к обновлению, в результате чего кэшированное значение будет перезаписано новым, которое вы только что сработали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...