Проблема с вычислением расстояния в фоновом приложении iOS
Я хочу написать фоновое приложение. В этом приложении у меня есть currentUserLocation местоположение, которое было установлено пользователем. Поэтому я хочу рассчитать расстояние между этими двумя точками и, если пользователь прибудет в пункт назначения или находится в указанном диапазоне, запустить событие, например локальное уведомление.
что я имею
класс ViewController (предоставляет MapView)
Класс MapView (предоставляет карту)
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.map = [[MKMapView alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.map.delegate = self;
[self addSubview:self.map];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.pausesLocationUpdatesAutomatically = NO;
self.locationManager.desiredAccuracy = [[[Manager getInstance] returnValueForKey:@"GPS"] intValue];
}
Затем в locationManager: didUpdateLocations: Метод
- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
CLLocation *loc = [locations lastObject];
// calculate the distance between two points
float d = acos(sin(self.mapPin.coordinate.latitude/ 180*M_PI) *sin(self.map.userLocation.coordinate.latitude/ 180*M_PI)
+ cos(self.mapPin.coordinate.latitude/ 180*M_PI) *cos(self.map.userLocation.coordinate.latitude/ 180*M_PI) *cos(self.map.userLocation.coordinate.longitude/180*M_PI - self.mapPin.coordinate.longitude/ 180*M_PI));
d = d * 6378.137;
// calculate the distance between two points also
CLLocationDistance dist = [self.map.userLocation.location distanceFromLocation:loc];
if (UIApplication.sharedApplication.applicationState == UIApplicationStateActive ){
[self calculateDistanz:loc.coordinate];
}else{
NSLog(@"dist = %f",dist/1000);
NSLog(@"d = %f",d);
if (d <= self.range ) {
[[UIApplication sharedApplication] cancelAllLocalNotifications];
self.localNotif = [[UILocalNotification alloc] init];
if (self.localNotif == nil)
return;
self.localNotif.timeZone = [NSTimeZone defaultTimeZone];
self.localNotif.alertBody = @"Text";
self.localNotif.alertAction = @"Stop";
self.localNotif.soundName = @"Alarm.mp3";
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"someValue" forKey:@"someKey"];
self.localNotif.userInfo = infoDict;
self.localNotif.hasAction = YES;
[[UIApplication sharedApplication] presentLocalNotificationNow:self.localNotif];
}
}
}
Я также регистрирую приложение в info.plist в качестве фонового приложения для локальных обновлений. Так что проблема в том, что расчет останавливается при входе в фоновом режиме. метод -(void) locationManager: didUpdateLocations: вызывается, потому что операторы журнала отображаются в консоли. и там я вижу, что в этот момент, когда приложение переходит в фоновый режим, переменная d всегда одинакова. до тех пор, пока приложение не станет активным, тогда d обновляется.
Я читал и читал в течение одной недели, но я не могу найти ошибку... может быть, вы можете помочь спасибо за помощь...