2017-10-10 23 views
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應用程序並不重要。但想象一下,用戶下載了應用程序,並且在新版本中我想添加需要更改當前數據對象的新功能!那麼用戶將丟失所有數據。

+0

您可以使用NSKeyedArchiver嗎? – jervine10

+0

隨意處理相應的錯誤,而不是打印通用文字字符串(解碼器可以拋出幾個不同的錯誤)並編寫一個邏輯來遷移舊版本。 – vadian

+0

你問是否會處理數據丟失。我相信它的確如此。我們在我們的應用中使用NSKeyedArchiver,永不丟失升級數據。但是,您必須遷移適當的數據,併爲您添加的新字段提供默認值。 – jervine10

回答

0

我發現問題與文件格式有關。

我已經使用這個名字保存的NSKeyedArchiver對象:「Data.plist」

,當我已刪除「的.plist」的格式,這個問題已經解決了。