0

奇妙な問題があります。

私は2つのクラスを持っています:

  1. ビジネスVC
  2. お気に入りVC

それらの両方で、ユーザーから特定のポイントまでの現在の距離をユーザーに表示します。両方のクラスで、そのためにまったく同じコードを使用します。

FavoritesVC は、モーダル ビュー コントローラーとして表示されます。

何らかの理由で didUpdateLocations / didUpdateToLocationメソッドが BusinessVC でのみ呼び出され、FavoritesVC では呼び出されません。

両方のクラスにCLLocationManagerDelegate デリゲートを実装しています。

私が使用しているコード:

 -(void)viewDidLoad {
     [super viewDidLoad]; 
     [self locatedMe];
}

-(void) locatedMe{
    NSLog(@"locateMe");
    _locationManager = [[CLLocationManager alloc] init];
    [_locationManager setDelegate:self];
    [_locationManager setDistanceFilter:kCLDistanceFilterNone]; // whenever we move
    [_locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters]; // 100 m
    [_locationManager startUpdatingLocation];
}


// For iOS6
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray  *)locations {

    CLLocation * newLocation = [locations lastObject];
    NSNumber *lat = [[NSNumber alloc] initWithDouble:newLocation.coordinate.latitude];
    NSNumber *lon = [[NSNumber alloc] initWithDouble:newLocation.coordinate.longitude];

    self.userLocation = [[CLLocation alloc] initWithLatitude:[lat doubleValue] longitude:[lon doubleValue]];

}


// For earlier then iOS6
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{

    NSNumber *lat = [[NSNumber alloc] initWithDouble:newLocation.coordinate.latitude];
    NSNumber *lon = [[NSNumber alloc] initWithDouble:newLocation.coordinate.longitude];

    self.userLocation = [[CLLocation alloc] initWithLatitude:[lat doubleValue] longitude:[lon doubleValue]];

    NSLog(@"%@",self.userLocation);
}
4

1 に答える 1

0

わかった!このコードを使用してメインスレッドでコードを実行することで修正しました:

-(void) locateMe {
    NSLog(@"locateMe");
    dispatch_async(dispatch_get_main_queue(), ^{
         _locationManager = [[CLLocationManager alloc] init];
         [_locationManager setDelegate:self];
         [_locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; // 100 m
         [_locationManager startUpdatingLocation];
         [_locationManager startUpdatingHeading];
     });

}

于 2013-08-09T10:57:40.843 に答える