2

iOS SDK 8 と 8.1 にアップデートしてから、CLLocationManager didUpdateLocations のメソッドが呼び出されなくなったなど、多くの問題が発生しました。

コードは次のとおりです。

locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
    [locationManager requestAlwaysAuthorization];
}
[locationManager startUpdatingLocation];

メソッド:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ NSLog(@"Call?"); }
4

4 に答える 4

2

いくつかの考え:

  1. これをシミュレーターまたはデバイスでテストしていますか? これを実際のデバイスでテストする必要があります。FWIW、didUpdateLocations私の iOS 8.1 デバイスでは正常に動作します。

  2. 文字列を指定したことを確認してください。NSLocationAlwaysUsageDescriptionそうしないと、アプリは承認メッセージを表示せず、承認されません。

    明らかに、 「常に使用する」必要がない場合は、文字列requestWhenInUseAuthorizationを指定する必要がありますNSLocationWhenInUseUsageDescription

  3. チェックしました[CLLocationManager authorizationStatus]か?位置情報サービスを承認または開始しようとする前にこれを行います。これは、またはのいずれkCLAuthorizationStatusDeniedkCLAuthorizationStatusRestrictedである場合、ユーザーが設定に移動してそれを修正するまで位置情報サービスが機能しないためです。これらの認証コードのいずれかを取得した場合は、その趣旨のメッセージを提示することをお勧めします。

  4. 実装しましたlocationManager:didFailWithError:か?それは何かを報告しますか?

  5. 実装しましたlocationManager:didChangeAuthorizationStatus:か?成功した承認ステータスでこれを呼び出していますか?

于 2014-10-25T03:46:32.120 に答える
1

plist で NSLocationAlwaysUsageDescription と NSLocationWhenInUseUsageDescription の両方を指定します。

ここに画像の説明を入力

コードでも、承認を要求します。

if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { // or requestAlwaysAuthorization
    [self.locationManager requestWhenInUseAuthorization]; // or requestAlwaysAuthorization
}
[self.locationManager startUpdatingLocation];
于 2015-05-12T13:42:57.177 に答える
1

私は同じ問題を抱えていましたが、私のコード (viewdidupdate メソッド) にはこれがありませんでした:

_mapView.delegate = 自己;

何らかの理由で、アプリは線なしで iOS 7 で動作しましたが、iOS 8.1 では didUpdateUserLocation は呼び出されませんでした。

于 2014-11-01T18:12:48.487 に答える