コアロケーション フレームワークを初めて使用する場合、自分のコードが思いどおりに機能しない理由を理解するのに役立つことがあります。移動距離を追跡したいのですが、ビューが起動すると、毎回異なることを行います。場合によっては、1000 または別の大きな値にジャンプしたり、ランダムな増分で増加したりします。このコードが機能しない理由を誰でも理解できますか?
- (void)viewDidLoad
{
locationManager = [[CLLocationManager alloc] init];
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.delegate = self;
locationManager.distanceFilter = 100; //update every 100 meters
[locationManager startUpdatingLocation];
startLocation = nil;
[super viewDidLoad];
// Do any additional setup after loading the view.
}
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
if (startLocation == nil)
{
totalDistanceBetween = 0;
self.startLocation = newLocation;
}
CLLocationDistance distanceBetween = [newLocation distanceFromLocation:startLocation ];
startLocation = newLocation;
totalDistanceBetween += distanceBetween;
totalDistanceBetween = totalDistanceBetween * 0.001; //convert to m value to km
NSString *tripString = [[NSString alloc]
initWithFormat:@"%.02f",
totalDistanceBetween];
distance.text = tripString;
}