地図とボタン(かつてのマップアプリのような)を備えたビューがあり、ユーザーは地図上の現在の場所を中央に配置してズームできます。 locationServicesEnabledメソッドを使用できない場合(常にYESを返す)、didFailWithErrorメソッドが呼び出されているかどうかを確認し、buttonメソッドを呼び出すことができるかどうかを確認するためにBOOL属性を作成する必要がありますか?
読んでくれてありがとう。
編集:
このコードは私には機能しません。シミュレータを使用しています。 locationServicesEnabledを要求すると、常にYESが表示されます。
// Gets the user present location.
- (IBAction)locateUser:(id)sender {
if([CLLocationManager locationServicesEnabled]) {
CLLocationCoordinate2D coordinate;
coordinate.latitude = self.mapView.userLocation.location.coordinate.latitude;
coordinate.longitude = self.mapView.userLocation.location.coordinate.longitude;
[self zoomCoordinate:coordinate];
} else {
[[[[UIAlertView alloc] initWithTitle:@"Warning." message:@"Location services are disabled."
delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease] show];
}
}
設定には、位置情報サービスを無効にする2つのオプションがあります。最初のオプションは、すべてのアプリの位置情報サービスを無効にするグローバルスイッチ「[CLLocationManagerlocationServicesEnabled]」です。 2番目のオプションでは、一部のアプリでは位置情報サービスを無効にできますが、すべてのアプリでは無効にできません。
グローバルに無効化されているかどうか、およびアプリで無効化されているかどうかを確認するには、以下を使用します。
if([CLLocationManager locationServicesEnabled] &&
[CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied)
{
...
}
「locationServicesEnabled」は、ユーザーが環境設定で位置情報サービスを有効にしているかどうかを確認します。 MapViewはおそらくこの値をすでにチェックしており、位置情報サービスが利用できない場合は「self.mapView.userLocation」に値を設定しないでください。 このSO質問はあなたにもう少し情報を与えるかもしれません。
私もこの問題に遭遇し、まだ答えを見つけています。
authenticationStatusにはiOS4.2 +が必要であり、+(BOOL)locationServicesEnabledにはiOS4.0が必要であることに注意してください...以前のiOSバージョンでは、-(BOOL)locationServicesEnabled ...
- (BOOL) enableLocationServices
{
if ([CLLocationManager locationServicesEnabled])
{
self.locationManager.distanceFilter = 10;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[self.locationManager startUpdatingLocation];
[self.mapview setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
return YES;
}
else
{
return NO;
}
}