web-dev-qa-db-ja.com

CoreLocationで現在地を見つける方法

現在の場所をCoreLocationで見つける必要があり、複数の方法を試しましたが、これまでのところCLLocationManagerは0のみを返しました。(0.000.00.000)。

これが私のコードです(動作するように更新されました):

インポート

#import <CoreLocation/CoreLocation.h>

宣言済み

IBOutlet CLLocationManager *locationManager;
IBOutlet UILabel *latLabel;
IBOutlet UILabel *longLabel;

関数

- (void)getLocation { //Called when needed
    latLabel.text  = [NSString stringWithFormat:@"%f", locationManager.location.coordinate.latitude]; 
    longLabel.text = [NSString stringWithFormat:@"%f", locationManager.location.coordinate.longitude];
}

- (void)viewDidLoad {
    locationManager = [[CLLocationManager alloc] init];
    locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
    [locationManager startUpdatingLocation];
}
34

次のようにCoreLocationを使用して場所を見つけることができます。

インポートCoreLocation

#import <CoreLocation/CoreLocation.h>

CLLocationManagerを宣言します:

CLLocationManager *locationManager;

locationManagerviewDidLoadを初期化し、returnとして現在の場所をNSStringできる関数を作成します。

- (NSString *)deviceLocation {
    return [NSString stringWithFormat:@"latitude: %f longitude: %f", locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude];
}

- (void)viewDidLoad
{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
    [locationManager startUpdatingLocation];
}

deviceLocation関数を呼び出すと、期待どおりに場所が返されます。

NSLog(@"%@", [self deviceLocation]);

これは単なる例です。ユーザーが準備を整えずにCLLocationManagerを初期化することはお勧めできません。そしてもちろん、latitudeが初期化された後、locationManager.location.coordinateを使用してlongitudeCLLocationManagerを自由に取得できます。

[ビルドフェーズ]タブ(CoreLocation.framework)のプロジェクト設定にTargets->Build Phases->Link Binaryを追加することを忘れないでください。

77

CLLocationManagerを使用すると、位置情報をすぐに取得する必要はありません。 GPSおよび位置情報を取得するその他のデバイスは初期化されない場合があります。情報を入手するまでに時間がかかる場合があります。代わりに、locationManager:didUpdateToLocation:fromLocation:に応答するデリゲートオブジェクトを作成し、それをロケーションマネージャーのデリゲートとして設定する必要があります。

こちら をご覧ください

15
ThomasW