以下のコードは現在の場所を取得するはずです。しかし、上記のエラーが生成されます。関数didUpdateLocationsが呼び出されることはありません。
デバイス(iPhone 5s)でこれを実行するiOS 9.1。 Info.plistには、必要なデバイス機能とプライバシー-添付画像に示すように構成された場所の使用法の説明があります。助けてください!
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
locationManager.requestLocation()
}
func locationManager(manager: CLLocationManager,
didFailWithError error: NSError)
print(error.description)
}
func locationManager(manager: CLLocationManager, didUpdateLocations
locations: [CLLocation]) {
print(“got location”)
}
これを試してください:
に行く:
[〜#〜] edit [〜#〜]:コメントで述べたように、Xcodeも再起動すれば完了です!
お役に立てれば。
位置認証アラートが表示されない場合は、NSLocationAlwaysUsageDescriptionをタイプ文字列としてplistに追加してみてください。また、NSLocationWhenInUseUsageDescriptionについても同じことを行います。
google trueを検索すると、IOS4.0以降の問題と思われる回答が得られます。
xCODE 7.1では、Project => scheme => edit schemeの下にあります。
[実行] => [オプション] => [コアロケーション]で、[ロケーションシミュレーションを許可]を無効にします。
あなたのIOS [デバッグ]の下のシミュレータ=>場所で場所を選択します。これで問題が修正されました。
8.0-> 9.0/9.1から移行したアプリでも同じ問題が発生していました。 SwiftでのみCLLocationManagerの部分を記述するようないくつかのことを試み、同様に新しいObj-Cプロジェクトを試しました。また、さまざまなデバイスでテストしました。デバイスの問題を解決するために、didFailWithError funcを削除しました。エラーを完全に停止します。これは最善のアイデアとは思えないかもしれませんが、IOS9では、GPSまたは位置情報サービスを備えたデバイスにアプリケーションを制限できます。 Androidはこれを非常に長い間行ってきました。また、.plistで、NSLocationALwaysUsageDescriptionまたはNSLocationWhenInUseUsageDescrtiptionプロパティのアクセス許可が有効になっていないことに気付きました。
参考のために、現在の.plistが添付しているように、このエラーは発生せず、コントローラーファイルobj-cのコードチャンクも発生しません。このコードは、前の関数の最後から始まり、didFailWithErrorデリゲートとdidUpdateLocationsがコメントアウトされています。現在、これはIOS 9.1で正常に機能しています。
//Get map authorization
[CLLocationManager locationServicesEnabled];
locationManager = [[CLLocationManager alloc]init];
locationManager.delegate = self;
locationManager.allowsBackgroundLocationUpdates = YES;
if(nil == locationManager) locationManager = [[CLLocationManager alloc]init];
if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[locationManager requestAlwaysAuthorization];
}
//locationManager.distanceFilter=10;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
//- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
//{
// NSLog(@"didFailWithError: %@", error);
// UIAlertView *errorAlert = [[UIAlertView alloc]
// initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
// [errorAlert show];
//}
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
NSLog(@"LocationUpdated: %@",[locations lastObject]);
[self updateMapMarkers];
// NSDate* eventDate = location.timestamp;
// NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
// if(fabs(howRecent) < 15.0){
// [self updateMapMarkers];
// }
}
アプリでAppleマップを使用している人向けにこれらの提案があります