ロケーションマネージャーが存在しない場合は作成して開始する方法を使用しています。ユーザーが位置情報サービスを無効にしているかどうかを確認し、サービスを開始するために BOOL が指定されていない限り、それを尊重します。このメソッドは、サービスが開始されたかどうかを示すために BOOL を返します。
これは、サービスを開始してユーザーに初めてプロンプトを表示する場合に問題なく機能します。許可をタップした場合は通常どおり続行し、許可しない場合は手動で場所を入力するためのビューを表示します。
ただし、位置情報サービスの使用についてユーザーが考えを変えられるようにしたいので、GPS の使用に戻るためのボタンを用意しました。同じ関数を再度呼び出しますが、今回はユーザーの位置情報サービスの設定を無視します。これにより、ユーザーは再度許可/禁止するよう求められるはずですが、代わりに kCLDenied エラー コードがすぐに表示されます。
http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW11に基づいて、別のユーザー プロンプトを期待します。即時エラーではありません。
- (BOOL)startLocationServices:(BOOL)ignorePrefs
{
//
// /*UNREVISEDCOMMENTS*/
//
if (locationManager == nil)
{
if ([CLLocationManager locationServicesEnabled] || ignorePrefs)
{
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
[locationManager setDistanceFilter:10.0];
}
else
{
return NO;
}
}
[locationManager startUpdatingLocation];
return YES;
}
(私のロケーション マネージャー デリゲートは、拒否されたエラーが受信された場合、ロケーション マネージャーを解放し、nil に設定します。)