ios - 将位置数组保存到 NSUserDefaults

标签 ios objective-c core-data nsuserdefaults

我正在尝试构建一个应用程序来跟踪路线,然后将路线存储在 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/

相关文章:

ios - Swift 将选择器从另一个 View 触发到一个 View

ios - 如何在 UIScrollView 中实现不可滚动的 UICollectionView?

iphone - 自动重置损坏的 NSUserDefaults

iphone - 如何向 UILabel 的文本添加渐变,而不是背景?

ios - 核心数据实体重命名

ios - 了解 iOS Swift 中的 CoreData

objective-c - 其他类中的 UIApplicationDelegate 函数

ios - 滚动时 UITextView 的文本重叠

ios - Core Data 应用程序未能及时启动

ios - 什么是 NSManagedObjectContext 的 performBlock : used for?