0

我正在尝试保存我的 CLLocation 位置以供将来在我的应用程序中使用。我想出了以下几点:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"/Locations.plist"];
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: path];

[data setValue:[NSKeyedArchiver archivedDataWithRootObject:location] forKey:@"LocationList"];
[data writeToFile:path atomically:YES];

NSMutableArray *array = [[NSMutableArray alloc] initWithArray:[NSKeyedUnarchiver unarchiveObjectWithData: (NSData *)[data objectForKey:@"LocationList"]]];
    NSLog(@"%@",array);

当我运行我的应用程序时,编译器返回

-[NSKeyedUnarchiver initForReadingWithData:]: data is NULL

我究竟做错了什么?还是有更好和标准的方法来保存 CLLocation 数据?

4

1 回答 1

0

您已经忘记了您的方法实际返回的内容,当您将多个消息调用相互嵌入时,这是一种风险。

您存储了一个 CLLocation,所以这将返回一个 CLLocationObject:

[NSKeyedUnarchiver unarchiveObjectWithData: (NSData *)[data objectForKey:@"LocationList"]]

您的代码将其视为返回数组:

NSMutableArray *array = [[NSMutableArray alloc] initWithArray:... // Your returned CLLocation here.

这就是数组为 NULL 的原因。至于如何存储CLLocation数据,编码方式是正确的。(有关将 CLLocations 存储为 NSData 对象的明确参考,请参阅此答案。)

于 2015-01-08T19:59:14.673 回答