現在の場所を取得しようとしていますが、didUpdateLocationsのブレークポイントが呼び出されることはありません。
LocationManager:
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[locationManager setDesiredAccuracy:kCLDistanceFilterNone];
[locationManager startUpdatingLocation];
デリゲートメソッド:
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
その位置情報サービスを確認し、有効にして承認しました。
LocationManagerデリゲートメソッドが、本来のように呼び出されないのはなぜですか?
ありがとう、マイク
さらにiOS8では、次の2つの追加事項が必要です。
Info.plist
にキーを追加し、ロケーションマネージャーに開始を要求する承認を要求します。
NSLocationWhenInUseUsageDescription
NSLocationAlwaysUsageDescription
対応するロケーションメソッドの認証をリクエストする必要があります。
[self.locationManager requestWhenInUseAuthorization]
[self.locationManager requestAlwaysAuthorization]
コード例:
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
// Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7.
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[self.locationManager requestWhenInUseAuthorization];
}
[self.locationManager startUpdatingLocation];
ソース: http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/
この問題が発生したときは、スレッドの問題が原因でした。
これらのすべてのメソッドがメインスレッドで呼び出されることを確認してください。メインスレッドでstartUpdatingLocation
メソッドだけでなく、他のスレッドでも呼び出されることが非常に重要です。
内部スレッドをラップすることにより、メインスレッドでコードを強制的に実行できます。
dispatch_sync(dispatch_get_main_queue(), ^{
});
this answer もチェックしてください。
CLLocationManagerをプロパティとして追加したことを確認してください。
@property (nonatomic , strong) CLLocationManager *locationManager;
はい、プロパティは私にとって解決策であり、位置情報サービスが有効になっていることを確認することをお勧めします:
if ([CLLocationManager locationServicesEnabled]) {
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[self.locationManager startUpdatingLocation];
}
シミュレートする場所をシミュレーターに指示する必要があります。場所を指定しない場合、CLLocationManager
デリゲートメソッドは呼び出されません。シミュレータメニューの[デバッグ]-> [場所]を使用できます。また、Xcodeのデバッグ領域の近くには、Xcodeからアプリを実行したときに表示される小さな場所の矢印があります。これを使用して、モーションをシミュレートするGPXファイルを指定できます(ただし、実際のデバイスとは異なります)。
IOS 11以降では、3番目のキーをinfo.plistに指定する必要があることに注意してください:NSLocationAlwaysAndWhenInUseUsageDescription
CLLocationManagerDelegateが設定されている場合、MapView Delegateも設定されます
また、シミュレーターの場所を確認し、[シミュレーター]> [デバッグ]> [場所]をクリックします(都市走行または高速道路ドライブへの変更がない場合)。それは私のために働いた。