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