8

現在地の緯度と経度を取得する方法。

私はこれを試しました。Xcode 6.01 および IOS SDK 8.0 の使用

-(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)getCurrentLocation{    
    CLLocationCoordinate2D coordinate = [self getLocation];
    NSString *latitude = [NSString stringWithFormat:@"%f", coordinate.latitude];
    NSString *longitude = [NSString stringWithFormat:@"%f", coordinate.longitude];
    NSLog(@"Latitude  = %@", latitude);
    NSLog(@"Longitude = %@", longitude);
}


- (void)viewDidLoad{
    [super viewDidLoad];
    [self getCurrentLocation];

}

ここでは、シミュレーターの場所を展開 8.0 iPhone シミュレーター 4s に有効にします。デバイス上でも機能しません。

@ALL 私がここで間違ったことを教えてください。

4

4 に答える 4

0

iOS8 で位置情報サービスを実装するには、さらにいくつかのタスクを実行する必要があるようです。 この議論に従ってください

于 2014-10-01T19:00:31.647 に答える
0

はい、シミュレーターは位置情報サービスの過度に単純化された表現を提供します。物理デバイスは、動作を実際にテストする唯一の方法CLLocationManagerです。

問題は、 を呼び出しstartUpdatingLocationても、すぐに を取得できるとは限らないことですlocationnil(どちらかであるか、または負の値を持っていることがわかると思います。horizontalAccuracyこれは、場所がまだ決定されていないことを意味します。)

に準拠し、非同期的に呼び出されるCLLocationManagerDelegateを実装する必要があります。locationManager:didUpdateLocations:そのため、位置情報を使用する前に、このメソッドが呼び出されるのを待つ必要があります。また、実際のデバイスでは、デバイスがデバイスの位置情報を精緻化するにつれて、このメソッドが何度も呼び出され、精度が向上することに注意してください (たとえば、horizontalAccuracyある位置の更新から別の位置の更新までに数が減少することがあります)。


locationManager:didFailWithError:明らかに、問題を検出できるように も実装する必要があります。を呼び出す前にauthorizationStatus、 、locationServicesEnabled、および を呼び出すことも確認する必要があります。requestWhenInUseAuthorizationstartUpdatingLocation

于 2014-10-01T18:39:18.243 に答える