CLLocations之间的距离将无法正确返回

时间:2013-07-13 02:01:52

标签: iphone ios objective-c cllocationmanager cllocationdistance

在我的应用中,我试图获得两个位置之间的距离。我按下我的应用程序按钮,走过(大)房间,CLLocationDistance返回0.000000。

.h文件:

@property (strong, nonatomic) IBOutlet UIImageView *stopButton;
@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) CLLocation *firstLocation;
@property (strong, nonatomic) CLLocation *secondLocation;
@property (strong, nonatomic) IBOutlet UILabel *locationLabel;

.m文件:

- (void)viewDidLoad {
    [super viewDidLoad];
     self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.distanceFilter = kCLDistanceFilterNone;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [self.locationManager startUpdatingLocation];
    self.firstLocation = [self deviceLocation];
}

- myButtonFunction {
    self.secondLocation = [self deviceLocation];
    self.locationLabel.text = [[NSString alloc] initWithFormat:@"%f", [self.firstLocation distanceFromLocation:self.secondLocation]];
}

- (CLLocation *)deviceLocation {
    return [[CLLocation alloc] initWithLatitude:self.locationManager.location.coordinate.latitude longitude:self.locationManager.location.coordinate.longitude];
}

2 个答案:

答案 0 :(得分:0)

您需要等到位置管理员告诉您它有新信息。在此之前,您将始终获得相同的位置。

管理员会通过委托方法locationManager:didUpdateLocations:locationManager:didUpdateToLocation:fromLocation: for iOS< 6.0)通知您。您需要一个实现该方法的类作为位置管理器的委托,并且在调用该方法之前无法检查新位置。

另外,请注意,第一次调用该方法时,可能实际上并不存在 fresh 数据。请参阅my answer at "Core Location Negative Values"

答案 1 :(得分:0)

通过使用设备位置,您将失去对实际记录内容的大量控制权。例如,设备位置可能具有不更新的条件,除非您的位置变化超过20米......或者它可能每小时更新一次。你无从知晓。

正如Josh所说,你必须从CLLocationManagerDelegate回调获得位置。将它们存储在您的班级中,当您按下按钮时,记录您存储的最后位置。只有这样,您才能获得与您指定的位置设置相关的数据。