didUpdateToLocation停止呼叫
问题描述:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation;
通话1〜2次,从来没有更多...为什么呢?
-(void) startLocation {
if (locationManager == nil)
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
locationManager.distanceFilter = 10;
[locationManager startUpdatingLocation];
}
和:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
contadorSegundos++;
float diferencaLatitude = 0;
float diferencaLongitude = 0;
NSLog(@"old latitude: %f", oldLocation.coordinate.latitude);
NSLog(@"old longitude: %f", oldLocation.coordinate.longitude);
NSLog(@"new longitude: %f", newLocation.coordinate.longitude);
NSLog(@"old latitude: %f", newLocation.coordinate.latitude);
if(oldLocation) {
if(oldLocation.coordinate.latitude > newLocation.coordinate.latitude)
diferencaLatitude = oldLocation.coordinate.latitude - newLocation.coordinate.latitude;
else if(newLocation.coordinate.latitude > oldLocation.coordinate.latitude)
diferencaLatitude = newLocation.coordinate.latitude - oldLocation.coordinate.latitude;
}
if (oldLocation) {
if(oldLocation.coordinate.longitude > newLocation.coordinate.longitude)
diferencaLongitude = oldLocation.coordinate.longitude - newLocation.coordinate.longitude;
else if(newLocation.coordinate.longitude > oldLocation.coordinate.longitude)
diferencaLongitude = newLocation.coordinate.longitude - oldLocation.coordinate.longitude;
}
//NSLog(@"dif lat %f", diferencaLatitude);
//的NSLog(@ “DIF长%F”,diferencaLongitude);
CLLocationCoordinate2D coord;
if ((diferencaLatitude > 1) || (diferencaLongitude > 1)) {
_emMovimento = YES;
NSLog(@"em movimento");
}
else {
if(contadorSegundos > 10) {
_emMovimento = NO;
contadorSegundos = 0;
NSLog(@"parado");
}
}
coord.longitude = newLocation.coordinate.longitude;
coord.latitude = newLocation.coordinate.latitude;
_latitude = coord.latitude;
_longitude = coord.longitude;
NSLog(@"latitude: %f", _latitude);
NSLog(@"longitude: %f", _longitude);
MKReverseGeocoder *geocoder = [[MKReverseGeocoder alloc] initWithCoordinate:coord];
[geocoder setDelegate:self];
[geocoder start];
答
此问题是因为ARC自动释放对象的LocationManager。
答
此方法不再使用。您必须使用下面的方法:
- (无效)的LocationManager:(CLLocationManager *)经理 didUpdateLocations:(NSArray的*)位置
它返回的位置的数组,你得到的最后一个。
[位置lastObject]
答
当您使用过滤器下面你告诉委托只更新位置情况下,用户改变其位置至少10米。 Isn t that what you want? If it
s没有,将期望的精度改为最佳,距离过滤器改为无。
locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; locationManager.distanceFilter = 10;
+0
它也不起作用 – Ladessa
这不起作用...同样的问题 – Ladessa