当对象的属性在归档和取消归档过程之间发生变化时,我对 NSKeyedArchiver 和 NSKeyedUnarchiver 有点挣扎。这是一个具体的例子:
我有一个类,比方说Task
,它有属性name
and desc
,两者都是 type NSString
。现在,我使用存档NSKeyedArchiver archivedDataWithRootObject
并将其写入文件。稍后我可以从文件中读取它并使用它NSKeyedUnarchiver unarchiveObjectWithData(data)
来回到我想要的位置。当Task
获得一项新财产并且为了使事情变得有趣而失去一项时,问题就来了。
所以现在,Task
has name
,这是一个NSString
,但是desc
不见了。此外,我添加了dateDue
type的属性NSDate
。然后启动模拟器。问题是未归档的是 oldTask
具有 olddesc
属性,而不是 new dateDue
。
我initFromCoder
实际上考虑了当前类中不存在属性并且不尝试对其进行解码的情况。
有没有办法向 NSCoder 方法解释不是像我序列化它时那样创建对象的精确副本(我意识到这是序列化/反序列化定义的一部分),而是允许我灵活地版本它?
谢谢