3

アプリにコアロケーションを実装しました。

ユーザーがアプリの起動時に現在地の共有を許可すると、すべてが完璧に機能します。
ただし、ユーザーが自分の場所を共有しない場合、アプリの場所フィールドに「南大西洋」が表示されます。

これを回避するために何をすべきか、そしてユーザーが自分の現在地を共有していないときに何を表示すべきか。

私は場所を取得するためにこのコードを使用しています:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

    [self.window makeKeyAndVisible];


    locationManager = [[CLLocationManager alloc] init];
    locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [locationManager startUpdatingLocation];

    CLGeocoder *ceo = [[CLGeocoder alloc]init];
    CLLocation *loc = [[CLLocation alloc]initWithLatitude:locationManager.location.coordinate.latitude longitude:locationManager.location.coordinate.longitude]; //insert your coordinates

    [ceo reverseGeocodeLocation: loc completionHandler:
     ^(NSArray *placemarks, NSError *error)
     {
         CLPlacemark *placemark = [placemarks objectAtIndex:0];
         NSLog(@"placemark %@",placemark);
         //String to hold address
         locatedAt = [[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "];
         NSLog(@"addressDictionary %@", placemark.addressDictionary);

         NSLog(@"placemark %@",placemark.region);
         NSLog(@"placemark %@",placemark.country);  // Give Country Name
         NSLog(@"placemark %@",placemark.locality); // Extract the city name
         NSLog(@"location %@",placemark.name);
         NSLog(@"location %@",placemark.ocean);
         NSLog(@"location %@",placemark.postalCode);
         NSLog(@"location %@",placemark.subLocality);

         NSLog(@"location %@",placemark.location);
         //Print the location to console
         NSLog(@"I am currently at %@",locatedAt);
     }];


    return YES;
}



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

}
4

2 に答える 2

4

[CLLocationManager authorizationStatus]次のような方法を使用して、ユーザーが位置情報サービスを許可していることを確認できます。

int result = [CLLocationManager authorizationStatus];

に戻り値があります

typedef enum {
    kCLAuthorizationStatusNotDetermined = 0,
    kCLAuthorizationStatusRestricted,
    kCLAuthorizationStatusDenied,
    kCLAuthorizationStatusAuthorized
} CLAuthorizationStatus;
于 2012-11-20T07:11:55.083 に答える
2

ユーザーの位置を取得する方法については、ロケーション認識プログラミングガイドを参照してください。結論として、(あなたのように)ロケーションマネージャーを作成する必要がありCLLocationManagerますが、次にロケーションサービス(低電力の大幅な変更のロケーションサービスまたは標準のロケーションサービス)を開始し、CLLocationManagerDelegateメソッドdidUpdateLocationsがロケーションを返すのを待ちます(またはdidFailWithErrorアプリが認証に失敗したか、デバイスが何らかの理由で位置情報リクエストを満たせなかったために、エラーを報告するため。ただし、から場所を取得することはできませんCLLocationManagerdidUpdateLocations経度と緯度の使用を確実に開始する前に、サービスが呼び出されるのを待つ必要があります。

Location Awarenessプログラミングガイドでは、非常に役立つコードサンプルを含め、これらすべてについて説明します。

于 2012-11-20T07:12:18.197 に答える