需要归档CLLocation数据

dev*_*ith 6 iphone nsuserdefaults nskeyedarchiver cllocation

我有一个CLLocation数据库,我想存档.该NSUserDefaults系统应该使用吗?否则,如何最好地存档CLLocation数据?

Dun*_*age 14

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

CLLocation *myLocationToStore = ...; // (a CLLocation object)
NSData *locationData = [NSKeyedArchiver archivedDataWithRootObject:myLocationToStore];
Run Code Online (Sandbox Code Playgroud)

然后可以将其存档到NSUserDefaults,同样只需在使用NSKeyedUnarchiver检索它时进行解码:

CLLocation *myStoredLocation = (CLLocation *)[NSKeyedUnarchiver unarchiveObjectWithData:locationData];
Run Code Online (Sandbox Code Playgroud)

斯威夫特同等功能是:

class func archivedDataWithRootObject(_ rootObject: AnyObject) -> NSData]
class func unarchiveObjectWithData(_ data: NSData) -> AnyObject?
Run Code Online (Sandbox Code Playgroud)


occ*_*lus 4

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

\n\n

引用苹果文档

\n\n
\n

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

\n
\n\n

更多信息请点击这里

\n\n

如果您的 CLLocation 数据确实算作用户首选项信息(我不相信),则必须将 CLLocation 内的信息映射到与 NSUserDefaults 兼容的类型。阅读NSUserDefaults 的文档

\n\n

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

\n