web-dev-qa-db-ja.com

IOS 9 Error Domain = kCLErrorDomain Code = 0 "(null)"

以下のコードは現在の場所を取得するはずです。しかし、上記のエラーが生成されます。関数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”)
}

Info.plist

31
Tusshu

これを試してください:

に行く:

  • 製品->スキーム->スキームの編集->オプション->ロケーションの許可シミュレーションをチェックする必要がありますデフォルトのロケーションを提供して、「なし」に設定したままにしないでください

[〜#〜] edit [〜#〜]:コメントで述べたように、Xcodeも再起動すれば完了です!

お役に立てれば。

46
H4Hugo

位置認証アラートが表示されない場合は、NSLocationAlwaysUsageDescriptionをタイプ文字列としてplistに追加してみてください。また、NSLocationWhenInUseUsageDescriptionについても同じことを行います。

4
user5516570

google trueを検索すると、IOS4.0以降の問題と思われる回答が得られます。

xCODE 7.1では、Project => scheme => edit schemeの下にあります。

[実行] => [オプション] => [コアロケーション]で、[ロケーションシミュレーションを許可]を無効にします。

あなたのIOS [デバッグ]の下のシミュレータ=>場所で場所を選択します。これで問題が修正されました。

3
DustPhyte

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];
//    }

}

.plist image

2
Big Kahuna

シミュレータからこれを試してください->デバッグ->場所

enter image description here

1
PrimeDime

アプリでAppleマップを使用している人向けにこれらの提案があります

  1. 常に正確な結果が得られるとは限らないため、シミュレーターの結果を中継しないでください。
  2. 実際のデバイスでのすべてのマップ関連のデバッグおよび実行テスト。
  3. Xcode 8(私の知る限り)のように、iOSデバイスをシステムに接続して、アプリを直接実行できます。
  4. 上記の問題でも解決方法は同じです。実際のデバイスで問題を解決してみてください。
0
user6698531