首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要归档CLLocation数据

需要归档CLLocation数据
EN

Stack Overflow用户
提问于 2011-03-10 21:02:05
回答 4查看 5.7K关注 0票数 6

我有一个要存档的CLLocation数据数组。是否应该使用NSUserDefaults系统?否则,如何最好地归档CLLocation数据呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-10 21:24:43

UserDefaults只能存储某些类型的数据,并且应该用于存储用户首选项信息,而不是任意的应用程序状态数据。

引用Apple docs

NSUserDefaults类提供了与默认系统交互的编程接口。默认系统允许应用程序自定义其行为以匹配用户的首选项。例如,您可以允许用户确定应用程序显示的度量单位或自动保存文档的频率。

更多信息here

如果您的CLLocation数据真的算作用户偏好信息(我不相信),那么您必须将CLLocation中的信息映射到与NSUserDefaults兼容的类型。阅读docs for NSUserDefaults

如果您的CLLocation数据不是用户首选项信息,而只是需要保留的应用程序数据/状态,那么您有几个选择;您可以将其存储在核心数据中,也可以使用键控归档-例如,请参见this tutorial

票数 4
EN

Stack Overflow用户

发布于 2015-01-09 04:04:29

要正确存储CLLocation而不丢失信息,请使用如下所示的NSKeyedArchiver:

代码语言:javascript
复制
CLLocation *myLocationToStore = ...; // (a CLLocation object)
NSData *locationData = [NSKeyedArchiver archivedDataWithRootObject:myLocationToStore];

然后可以将其归档到NSUserDefaults,并且在使用NSKeyedUnarchiver检索它时也可以同样简单地进行解码:

代码语言:javascript
复制
CLLocation *myStoredLocation = (CLLocation *)[NSKeyedUnarchiver unarchiveObjectWithData:locationData];

这些Swift equivalent functions是:

代码语言:javascript
复制
class func archivedDataWithRootObject(_ rootObject: AnyObject) -> NSData]
class func unarchiveObjectWithData(_ data: NSData) -> AnyObject?
票数 15
EN

Stack Overflow用户

发布于 2011-05-10 20:37:07

使用nsarchiver找到了解决方案,正如你所说的,它像魅力一样工作,谢谢。这就是我所做的。

代码语言:javascript
复制
- (id)initWithCoder:(NSCoder *)aDecoder
{

    self.PlaceName=[aDecoder decodeObjectForKey:@"inapPlaceName"];

    float lat, long1;

    lat=[aDecoder decodeDoubleForKey:@"inapCoordinateLat"];

    long1=[aDecoder decodeDoubleForKey:@"inapCoordinateLong"];  

    //inapCoordinate=[[CLLocationCoordinate2D alloc] initWithLatitude:lat1 longitude:long1];
    CLLocationCoordinate2D new_coordinate = { lat, long1 };
    self.inapCoordinate=new_coordinate;

    return self;

}

- (void)encodeWithCoder:(NSCoder *)aCoder
{

    [aCoder encodeObject:PlaceName forKey:@"inapPlaceName"];

    [aCoder encodeDouble:inapCoordinate.latitude forKey:@"inapCoordinateLat"];

    [aCoder encodeDouble:inapCoordinate.longitude forKey:@"inapCoordinateLong"]; 

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5259964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档