1

私のアプリには位置情報サービスが必要です。アプリを初めて開いたときに有効になっている場合、または以前に有効になっていた場合にのみ、メイン メソッドを実行したいと考えています。

次のコードを使用しています。

- (void)viewDidLoad
{
    [super viewDidLoad];
    if ([CLLocationManager authorizationStatus] == YES) {
        //are enabled, run the JSON request
        [self getDataFromJson];
    } else {
        //is not enabled, so set it up
        NSLog(@"no");
        [locationManager location];
    };

}

-(CLLocationCoordinate2D) getLocation{

    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    [locationManager startUpdatingLocation];
    CLLocation *location = [locationManager location];
    CLLocationCoordinate2D coordinate = [location coordinate];
    return coordinate;

}

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    if (status == kCLAuthorizationStatusDenied) {
        //location denied, handle accordingly
        locationFailView.hidden = NO;
        mainView.hidden = YES;
    }
    else if (status == kCLAuthorizationStatusAuthorized) {
        //hooray! begin tracking
        [self getDataFromJson];
    }
}

//class to convert JSON to NSData
- (IBAction)getDataFromJson {
    NSLog(@"running");
    CLLocationCoordinate2D coordinate = [self getLocation];
    NSString *latitude = [NSString stringWithFormat:@"%f", coordinate.latitude];
    NSString *longitude = [NSString stringWithFormat:@"%f", coordinate.longitude];
    ...
}

getDataForJsonこのコードは、何度も実行されて無限ループが発生する (つまり、「実行中」が何度も出力される)ことを除けば、ほぼ完全に機能します。

一度しか実行されないので、どうすればうまくいかないのですか?

ありがとう!

4

1 に答える 1

2

私にはgetDataFromJsonがgetLocationを呼び出し、そのデリゲートがlocationManager:didChangeAuthorizationStatus:を呼び出し、 getDataFromJsonを呼び出すlocationManagerインスタンスを割り当てているようです。getDataFromJsonは status == kCLAuthorizationStatusAuthorized の場合にのみ呼び出されるため、位置情報サービスが有効になっている場合にのみ発生します。

getDataFromJson -> getLocation ~> locationManager:didChangeAuthorizationStatus (デリゲート経由) -> getDataFromJson (ロケーション サービスが有効な場合)。

于 2013-07-08T19:18:31.707 に答える