我正在尝试构建一个应用程序来跟踪路线,然后将路线存储在 parse.com 中,这样我就可以使用 MKpolyline 覆盖用户采用的路线。
我是 Objective-c 和 IOS 开发的新手,所以请原谅我的无知!!
当我尝试保存所采用的路线时,我被卡住了,然后发送/保存位置数组,以便我可以在用户完成事件时打开的下一个 View Controller 上重建 MKpolyline。
我不确定是将位置数组保存到 NSUserDefaults 还是保存到核心数据。目前我正在将 Array 转换为 NSValue 并将其保存到 NSUserDefaults,如下所示:
count = [self.locations count];
CLLocationCoordinate2D coordinates[count];
for (NSInteger i = 0; i < count; i++) {
coordinates[i] = [(CLLocation *)self.locations[i] coordinate];
NSValue *locationValue = [NSValue valueWithMKCoordinate:coordinates[i]];
[_locationsArray addObject:locationValue];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:totalDistance forKey:@"totalDistance"];
[defaults setObject:_locationsArray forKey:@"mapOverlay"];
// [defaults setDouble:_totalTime forKey:@"totalTime"];
[defaults setObject:avgSpeedToBeSaved forKey:@"averageSpeed"];
[defaults setObject:totalCalories forKey:@"totalCalories"];
[defaults synchronize];
这样做正确吗?以及如何重建位置数组。
如果有人能指出我正确的方向,将不胜感激。
我现在已将我的代码更改为 manecosta 建议的代码以重建 CLLocationCoordinates 以创建 MKPolyline,但我现在的问题是从我开始转换为 NSValue 的位置开始数组为 Null。我无法弄清楚这是为什么,我首先构建 LocationsArray 的方式有问题吗?
最佳答案
是的,我猜你做对了,重建只是做相反的事情,应该是这样的:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *locationsArray = [defaults objectForKey:@"mapOverlay"];
CLLocationCoordinate2D coordinates[[locationsArray count]];
NSInteger i = 0;
for(NSValue *locationValue in locationsArray){
coordinates[i] = [locationValue MKCoordinateValue];
i++;
}
关于您使用用户默认值来存储大量数据这一事实。我真的不知道什么是正确的,但我会告诉你,我以前用它来存储我的应用程序的缓存,它们是相当大的数组和字典,而且它从未让我失望。
关于ios - 将位置数组保存到 NSUserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22079020/