@implementation MyLocation
SYNTHESIZE_SINGLETON_FOR_CLASS(MyLocation);
@synthesize delegate, locationManager;
- (id) init
{
self = [super init];
if (self != nil)
{
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
self.locationManager.delegate = self;
}
return self;
}
- (void) timeoutHandler:(NSTimer *)_timer
{
timer = nil;
[self update_location];
}
-(void) update_location
{
hasLocation=NO;
[locationManager startUpdatingLocation];
timer = [NSTimer scheduledTimerWithTimeInterval: 3.0
target: self
selector: @selector(timeoutHandler:)
userInfo: nil
repeats: NO
];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSLog(@"location ready");
if(timer != nil) {
[timer invalidate];
timer = nil;
}
hasLocation = YES;
[[NSNotificationCenter defaultCenter] postNotificationName:@"location_ready" object:nil];
if (debug_switch)
NSLog(@" Delegate function, Getting new location from locationManager from Mylocation.m");
_coordinate = newLocation.coordinate;
source_lat=_coordinate.latitude;
source_lng=_coordinate.longitude;
//TRACE(@"new location: %f %f", _coordinate.latitude, _coordinate.longitude);
//[delegate locationUpdate:newLocation.coordinate];
}
В первый раз я запустил подпрограмму update_location, менеджер местоположений быстро перешел на процедуру обратного вызова didupdatetolocation. Нет проблемыНепоследовательное locationManager didupdatetolocation на Iphone
Однако в следующий раз, когда я снова вызову функцию update_location, callback didupdatetolocation никогда не вводился. Почему такое несоответствие? почему обратный вызов не введен?
Хорошо, если я не изменить свое местоположение бы, что обратного вызова вызывается снова? – lilzz
Обратный вызов НЕ будет вызываться до тех пор, пока местоположение не изменится. Иногда это происходит особенно внутри здания, но это связано с флуктуацией самого сигнала GPS (поэтому обратный вызов даст вам измененное местоположение). – barley
И обратный вызов будет вызван сразу после вызова startUpdatingLocation, даже если вы не изменили местоположение. Я думаю, что в вашем исходном коде второй и более поздний startUpdatingLocation-вызов просто игнорируется. (Это мое лучшее предположение, я не пробовал вызывать startUpdatingLocation несколько раз.) – barley