當對象的屬性在存檔和取消存檔過程之間發生變化時,我對NSKeyedArchiver和NSKeyedUnarchiver有點掙扎。這裏有一個具體的例子:如何在版本化類中使用NSCoder
我有一個類,比方說Task
,它具有的屬性name
和desc
,既NSString
型。現在,我使用NSKeyedArchiver archivedDataWithRootObject
進行歸檔並將其寫入文件。我稍後可以從一個文件中讀取它,並使用NSKeyedUnarchiver unarchiveObjectWithData(data)
來回到我想要的位置。當Task
獲得一個新的屬性,併爲了讓事情變得有趣,就會失去一個。
所以現在,Task
有name
,這是一個NSString
,但desc
缺失。此外,我添加NSDate
類型的屬性dateDue
。然後啓動模擬器。問題是沒有存檔的是舊的Task
與舊的desc
屬性,但不是新的dateDue
。
我的initFromCoder
實際上考慮了當前類中沒有屬性並且不嘗試對其進行解碼的情況。
有沒有辦法解釋NSCoder方法不要創建一個對象的確切副本,因爲它是我序列化它的時候(我意識到這是序列化/反序列化定義的一部分),而是讓我版本的靈活性?
感謝