iphone: метод делегата менеджера CLLocation не вызывается при нажатии кнопки - PullRequest
0 голосов
/ 27 мая 2011

еще один плохой день, Бог знает, в чем проблема с этим, но методы делегирования для CLLocation Mangaer не вызываются, когда я нажимаю кнопку обновления, при нажатии этой кнопки я прошу менеджера местоположения обновить местоположение

-(void) viewWillAppear:(BOOL)animated{


locationManager=[[CLLocationManager alloc] init];
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
locationManager.delegate = self;
[locationManager startUpdatingLocation];

}

 - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{

NSLog(@"failed");

}

  - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{


NSLog(@"current lat= %f and long=%f ", newLocation.coordinate.latitude, newLocation.coordinate.longitude);

NSDate *eventDate = newLocation.timestamp; 
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];

if (abs(howRecent) < 10) {

    [lat setText:[ NSString stringWithFormat:@"%f", newLocation.coordinate.latitude]];
    [lon setText:[ NSString stringWithFormat:@"%f", newLocation.coordinate.longitude]];

}

else {
    [lat setText:@"Not changed"];
    [lon setText:@"Not changed"];
}

}

  -(IBAction) refrechLoc{

NSLog(@"updating location");
[locationManager startUpdatingLocation];

} Пожалуйста, помогите мне решить эту проблему.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 27 мая 2011

Похоже, что оно начинает обновляться на viewWillAppear, поэтому не будет обновлять местоположение, пока оно не остановлено stopUpdatingLocation. Если вы хотите возобновить обновление, вы должны позвонить stopUpdatingLocation до startUpdatingLocation:

-(IBAction) refrechLoc{
    NSLog(@"updating location");
    [locationManager stopUpdatingLocation];
    [locationManager startUpdatingLocation];
}

imho, нет необходимости в обновлении местоположения, перезагрузка вообще

0 голосов
/ 27 мая 2011

Вы неправильно поняли, как работает CLLocationManager.Делегат вызывается, когда у CLLocationManager есть новое местоположение для вас.[locationManager startUpdatingLocation]; просто говорит менеджеру местоположения начать обновление местоположения, поэтому нет необходимости вызывать его дважды.

РЕДАКТИРОВАТЬ: Для ясности: делегат вызывается при обновлении местоположения,т.е. когда устройство переместилось.

...