0
我正在使用NSKeyedArchiver()
在Swift中保存和加载对象。使用NSKeyedArchiver保存和加载对象数据 - 对象变量发生变化后数据丢失
问题是当对象变量发生变化时,例如将新变量添加到对象中,NSKeyedArchiver()无法解码上次保存的对象。
func tripsDataFilePath() -> URL {
return getDocumentsDirectory().appendingPathComponent("Data.plist")
}
我使用保存的代码:
func saveData() {
NSKeyedArchiver.archiveRootObject(data, toFile: dataFilePath().path)
}
和加载代码:
func loadData() {
if let data = NSKeyedUnarchiver.unarchiveObject(withFile: dataFilePath().path) {
project = data as! [Project]
}
}
有什么办法来防止数据丢失(无法加载最后的对象)用于何时更改对象结构?
开发第一版iOS应用程序并不重要。但想象一下,用户下载了应用程序,并且在新版本中我想添加需要更改当前数据对象的新功能!那么用户将丢失所有数据。
您可以使用NSKeyedArchiver吗? – jervine10
随意处理相应的错误,而不是打印通用文字字符串(解码器可以抛出几个不同的错误)并编写一个逻辑来迁移旧版本。 – vadian
你问是否会处理数据丢失。我相信它的确如此。我们在我们的应用中使用NSKeyedArchiver,永不丢失升级数据。但是,您必须迁移适当的数据,并为您添加的新字段提供默认值。 – jervine10