別の SO の質問に基づいて、didUpdateLocations:
次のようにメソッドを実装しました。
- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
// Get the latest location found
CLLocation *location = [locations lastObject];
NSTimeInterval locationAge = -[location.timestamp timeIntervalSinceNow];
if (locationAge > 5.0) return;
if (location.horizontalAccuracy < 0) return;
if (_bestEffort == nil || _bestEffort.horizontalAccuracy >= location.horizontalAccuracy) {
_bestEffort = location;
// Let the delegate know
if (self.delegate && [self.delegate respondsToSelector:@selector(location:didUpdateLocationTo:)]) {
[self.delegate location:self didUpdateLocationTo:location];
}
if (location.horizontalAccuracy <= _locationManager.desiredAccuracy) {
// Great, we've found our final location so stop searching!
[self stopTrackingLocation];
// Let our delegate know we've finished our work
if (self.delegate && [self.delegate respondsToSelector:@selector(location:didFinishTrackingLocationWithFinalLocation:)]) {
[self.delegate location:self didFinishTrackingLocationWithFinalLocation:location];
}
}
}
}
このコードでは、正しく動作しないように見えることを除けば、すべてが理にかなっています。コードをステップ実行すると、
- locationAgeは5歳未満で良い
- 場所 horizontalAccuracy は 0 未満です。これは良いことです
- bestEfforts の水平精度は場所の水平精度と同じであるため、その状態になることはありません
- たとえそうであった
stopTrackingLocation
としても、場所の horizontalAccuracy が < 0 (2 番目の if ステートメント) になることはあり得ないため、メソッドを呼び出すことはありませんが、私の場所の管理者が希望する精度は -2 (ナビゲーションに最適) であるため、実際にこのメソッドを離れることはありません。
私は何を間違っていますか、またはこれを正しく機能させるにはどうすればよいですか?