在我的应用程序中,我计算了足迹,现在我想知道速度,我想存储GPS坐标以在另一个ViewController中绘制折线。 我以为我可以使用以下代码存储此坐标:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSLog(@"didUpdateToLocation: %@", newLocation);
CLLocation *currentLocation = newLocation;
if (currentLocation != nil) {
locationArray = [[NSMutableArray alloc]init];
[locationArray addObject:currentLocation];
speed = (int) currentLocation.speed * 3.6;
self.labelSpeed.text = [NSString stringWithFormat:@"%d Km/h",speed];
NSLog(@"%@", [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude]);
NSLog(@"%@", [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude]);
}
}
但它不起作用,因为在我locationArray
中它只存储了GPS传感器接收的最后一个坐标。
为了更好地向你解释我正在努力开发的东西,我将在这里写一些非常具体的内容:
在第一个ViewController中,我想显示2个标签,其中我计算了步数和速度。所以在这个ViewController中我要接收坐标数据,我认为这些数据应该插入NSMutableArray
。在第二个ViewController中,我展示了一个标签,在其中我将插入总步数(通过使用prepareForSegue
方法)并在MapView下面绘制一条折线以显示我所创建的路径。为此我需要在第一个ViewController中收到的坐标,所以我要使用prepareForSegue
方法将数据从第一个ViewController传递到第二个ViewController。
我的问题是如何存储所有坐标以使它们在第二个ViewController中绘制折线? Cna有人帮帮我吗?
谢谢
答案 0 :(得分:1)
您只存储最后一个坐标,因为每次获得新位置时都要初始化数组,将分配线移到另一个方法(如viewDidLoad
)并删除didUpdateToLocation
中的那一行
- (void)viewDidLoad
{
[super viewDidLoad];
locationArray = [[NSMutableArray alloc]init];
//.... more code
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSLog(@"didUpdateToLocation: %@", newLocation);
CLLocation *currentLocation = newLocation;
if (currentLocation != nil) {
//locationArray = [[NSMutableArray alloc]init]; //This line doesn't go here
[locationArray addObject:currentLocation];
speed = (int) currentLocation.speed * 3.6;
self.labelSpeed.text = [NSString stringWithFormat:@"%d Km/h",speed];
NSLog(@"%@", [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude]);
NSLog(@"%@", [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude]);
}
}