Objective-C将经度和纬度存储在变量中

时间:2015-09-23 00:12:43

标签: ios objective-c

我这里的代码可以获得经度和纬度:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    CLLocation *currentLocation = newLocation;

    if (currentLocation != nil) {
        Long.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude];
        Lat.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude];
    }
}

我的问题是,当我移动手机时,这些值会发生变化,我正在寻找将它们存储到变量中以便它们发生变化。这可能吗?

1 个答案:

答案 0 :(得分:2)

Hrrrm ......

是的,这是可能的。琐事甚至。只需将currentLocation从函数中移出并进入类的@interface:

@interface MyClass
{
  //other instance variables here
  CLLocation *currentLocation;
}
//properties and function definitions go here
@end

然后改变你的功能:

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *) newLocation 
    fromLocation:(CLLocation *)oldLocation
{
   //Now saves to an instance variable instead of a local var.
   if (currentLocation == nil)
     currentLocation = newLocation; 

    if (currentLocation != nil) {
        Long.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude];
        Lat.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude];
    }
}

然而,目前尚不清楚你在问什么。 didUpdateToLocation方法是位置管理器的委托方法,用于报告用户位置中的更改。您想要存储哪些具体位置,以及在什么条件下?您想要保存位置管理员开始更新位置后获得的第一个位置更新吗?然后你想用它做什么?

编辑:

请注意,当您首次向位置管理员询问位置更新时,您获得的第一个位置通常会非常糟糕。 (它离开一公里或更远的情况并不罕见。)您需要不断检查位置的水平精度,并等待GPS稳定并给出合理的读数。