Iphone 两个位置之间的距离';不能正确返回

Iphone 两个位置之间的距离';不能正确返回,iphone,ios,objective-c,cllocationmanager,cllocationdistance,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

在我的应用程序中,我尝试获取两个位置之间的距离。我按下应用程序的按钮,穿过(大)房间,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];
}

您需要等待,直到位置管理器告诉您它有新信息。在这之前,您将一直处于同一位置

经理将通过委派方法通知您(
locationManager:didUpdateToLocation:fromLocation:
对于iOS<6.0)。您需要一个实现该方法的类被指定为位置管理器的委托,并且在调用该方法之前,您无法检查新位置


另外,请注意,第一次调用该方法时,实际上可能没有新数据。请参阅。

使用设备位置,您将无法控制实际录制的内容。例如,设备位置可能存在不更新的条件,除非您的位置更改超过20米。。。或者它每小时更新一次。你没办法知道


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

您的房间有一百米宽?@JoshCaswell抱歉,那是一些旧代码,我用kCLLocationAccuracyBest重新编写了它,但它仍然不起作用。您必须实现CLLocationManagerDelegate方法委托。当位置管理器检测到位置更改时,它会调用didUpdateToLocation委托方法。我可以强制CLLocationManager提供新数据吗?(强制方法)不。另外,请注意:我只是在看文档,CLLocationManager的startUpdatingLocation功能在这种情况下不起作用吗?@JoshCaswell我也不这么认为,我在房间的每一端等了大约一分钟才按下按钮。
startUpdatingLocation
让经理开始更新。一旦更新,它就会调用该方法让您知道。你必须等待。