2012-11-03 93 views
0

下面的方法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]; 

回答

1

此问题是因为ARC自动释放对象的LocationManager。

0

此方法不再使用。您必须使用下面的方法:

  • (无效)的LocationManager:(CLLocationManager *)经理 didUpdateLocations:(NSArray的*)位置

它返回的位置的数组,你得到的最后一个。

[位置lastObject]

+0

这不起作用...同样的问题 – Ladessa

0

当您使用过滤器下面你告诉委托只更新位置情况下,用户改变其位置至少10米。 Isn t that what you want? If it s没有,将期望的精度改为最佳,距离过滤器改为无。

locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; locationManager.distanceFilter = 10;

+0

它也不起作用 – Ladessa