我正在尝试构建一个跟踪路线的应用,然后将路线存储在parse.com中,以便我可以使用MKpolyline覆盖用户所采用的路线。
我对Objective-c和IOS开发很新,所以请原谅我的无知!
当我尝试保存所采用的路线时,我被卡住,然后发送/保存位置数组,以便我可以在用户完成活动时打开的下一个视图控制器上重建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的方式有什么问题吗?
答案 0 :(得分:1)
是的,我猜你做得对,重建只是反过来,这应该是这样的:
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++;
}
关于您使用用户默认值存储大量数据的事实。我真的不知道什么是正确的,但我会告诉你,我之前用它来存储我的应用程序的缓存,它是非常大的数组和字典,它从来没有让我失望。
答案 1 :(得分:0)
您可以使用NSUserDefaults
objectForKey:
获取对象
正如您[defaults setObject:totalDistance forKey:@"totalDistance"];
。
现在,如果您想从NSUserDefaults获取totalDistance
,那么您可以使用以下代码:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *arrayLocation = [defaults objectForKey:@"totalDistance"];
但是建议你不要在项目中使用NSUserDefaults
。 NSUserDefaults
只应用于存储少量数据(这只是个人观点。)。你的locationArray
会非常大。对?
两个选项之间的比较NSUserDefaults
&amp; CoreData
What are the limitations of NSUserDefaults?
我在这里发帖回答(来自上面的链接 - 如果问题在未来时间不可用 - 谁知道!!)
NSUserDefaults提供了一个简单的学习曲线和线程安全 实施
否则我发现Core Data在各方面都很出色。尤其是 关于配置默认值和迁移例程。
编辑:我其实没试过,但似乎是这样的.. 告诉我它是否不起作用。
从NSArray
NSValue
NSValue *value = [defaults objectForKey:@"mapOverlay"];
NSArray *arrayTemp;
[value getValue:&arrayTemp];