0

次の方法

- (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 long%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];
4

3 に答える 3

1

この問題は、ARCがオブジェクトLocationManagerを自動的に解放するために発生しました。

于 2012-11-03T22:17:42.397 に答える
0

このメソッドはもう使用されていません。以下の方法を使用する必要があります。

  • (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

それは場所の配列を返します、あなたは最後のものを手に入れます。

[場所lastObject]

于 2012-11-03T01:39:37.867 に答える
0

以下のフィルターを使用すると、ユーザーが位置を少なくとも10メートル変更する場合にのみ位置を更新するようにデリゲートに指示します。そうでない場合は、 desiredAccuracyt that what you want? If itを最適に変更し、距離フィルターをnoneに変更します。

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

于 2012-11-03T02:29:46.563 に答える