Проблема с обновлением местоположения iOS

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

-(void)setUpUserLocation
{
    BOOL locationAllowed = [CLLocationManager locationServicesEnabled];
   if (locationAllowed==NO)
    {
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"No authorization"
        message:@"Please, enable access to your location"
        delegate:self cancelButtonTitle:@"Cancel"
        otherButtonTitles:@"Open Settings", nil];
        [alertView show];
    }
    else
    {
        locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;

        if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
            [locationManager requestWhenInUseAuthorization];
        }
    }
    [locationManager startUpdatingLocation];
}


-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    CLLocation *location=[locations lastObject];
    CLGeocoder *geocoder=[[CLGeocoder alloc]init];
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
        CLPlacemark *placemark = placemarks[0];
        NSDictionary *addressDictionary = [placemark addressDictionary];

    }];
    [self stopSignificantChangesUpdates];

}
- (void)stopSignificantChangesUpdates
{
    [locationManager stopUpdatingLocation];
    locationManager = nil;
}

Мой вопрос: если местоположение пользователя изменится, как мне дать пользователю предупреждение, например Your location changed, you need to update it then only you can get a Nearby Restaurant Location popup should come once the user location changes, иначе я не хочу каждый раз вызывать didUpdateLocation. Я позвонил startMonitoringSignificantLocationChanges, тогда он не вызвал didUpdateLocation в первый раз. Любая помощь по этому поводу.


person Shangari C    schedule 04.06.2016    source источник
comment
Извините, я не совсем понимаю вопрос. Вы хотите показать пользователю оповещение, информирующее его о том, что его местоположение изменилось, и поэтому ему нужно обновить приложение, чтобы найти ближайший ресторан? Если местоположение вашего пользователя изменится, вы можете пересчитать местоположение ресторана. Теперь, если вам абсолютно необходимо это сделать, просто сделайте это на didUpdateLocation с точностью, которая имеет смысл в вашем случае. если вы используете SignificantLocationChanges, менеджер местоположения сообщит вам только в том случае, если местоположение значительно изменилось (обычно на пару сотен метров)   -  person Daniel Ormeño    schedule 04.06.2016
comment
Да, спасибо, если местоположение пользователя снова изменится, мне нужно какое-то всплывающее окно, чтобы показать пользователю, что ваше местоположение изменяется с помощью кнопок allow и don't allow. Если они нажали «Разрешить», то обновите новое местоположение. а также ты упомянул, что SignificantLocationChanges ты можешь помочь мне с этим, я этого не знал. locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; locationManager.distanceFilter = 100;   -  person Shangari C    schedule 04.06.2016
comment
Есть ли какие-либо делегаты, чтобы обнаружить, что пользователь находится в пределах сотни метров от этого местоположения, иначе они достигли... Мне полезно вызвать веб-сервис на основе этого   -  person Shangari C    schedule 04.06.2016
comment
Взгляните на этот developer.apple.com/library/ios/ documentation/CoreLocation/ Здесь вы можете найти информацию о том, как iOS обрабатывает изменения местоположения, вы можете использовать значительные изменения местоположения, вызвав startMonitoringSignificantLocationChanges, который, я думаю, вы пробовали. Что касается предупреждения, вы можете использовать UIAlertController.   -  person Daniel Ormeño    schedule 04.06.2016
comment
с существенными изменениями местоположения ваш менеджер местоположения вызовет метод didUpdateLocation вашего делегата, у вас уже должно быть это на месте, насколько я понимаю.   -  person Daniel Ormeño    schedule 04.06.2016
comment
Да, я попытался назвать «Значительные изменения местоположения» вместо «Дата запуска», но он не назвал местоположение даты запуска. Что я могу сделать. Хорошо, спасибо за вашу ссылку. Но страница не найдена, вы можете отредактировать еще раз   -  person Shangari C    schedule 04.06.2016
comment
Давайте продолжим обсуждение в чате.   -  person Shangari C    schedule 04.06.2016


Ответы (1)


проверьте через некоторое время или проверьте после движения пользователя (что хотите), если условие верно, то позвоните в сервис...

Я думаю, это поможет вам;

Шаг 1

 (void)viewDidLoad {
[super viewDidLoad];

locationManager = [[CLLocationManager alloc] init];
//set the amount of metres travelled before location update is made
[locationManager setDistanceFilter:100];
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];

[locationManager requestAlwaysAuthorization]; 

// call the timer with 5 minutes cap using 5 * 60 = 300
[NSTimer scheduledTimerWithTimeInterval:300.0f target:self selector:@selector(sendlocation1) userInfo:nil repeats:YES];

Шаг 2

Каждые 100 метров меняйте устройство. Этот метод называется:

-(void)locationManager:(CLLocationManager *)manager
   didUpdateToLocation:(CLLocation *)newLocation
          fromLocation:(CLLocation *)oldLocation
{
    NSLog(@"%f",newLocation.coordinate.latitude);

    NSLog(@"%f",newLocation.coordinate.longitude);
    CLLocationDistance meters = [newLocation distanceFromLocation:oldLocation];
         if(meters >=100)
      {
         // call webservice for location is updated 
         [self sendlocation1];
      }else
      {
       // call normal method
       }
    }
person Suraj Sukale    schedule 04.06.2016