将位置数组保存到NSUserDefaults

时间:2014-02-27 19:56:14

标签: ios objective-c core-data nsuserdefaults

我正在尝试构建一个跟踪路线的应用,然后将路线存储在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的方式有什么问题吗?

2 个答案:

答案 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"];

但是建议你不要在项目中使用NSUserDefaultsNSUserDefaults只应用于存储少量数据(这只是个人观点。)。你的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];