【发布时间】:2012-11-02 10:27:15
【问题描述】:
当对象的属性在归档和取消归档过程之间发生变化时,我在使用 NSKeyedArchiver 和 NSKeyedUnarchiver 时遇到了一些问题。这是一个具体的例子:
我有一个类,比如说Task,它具有name 和desc 的属性,两者都是NSString 类型。现在,我使用NSKeyedArchiver archivedDataWithRootObject 存档并将其写入文件。稍后我可以从文件中读取它并使用NSKeyedUnarchiver unarchiveObjectWithData(data) 回到我想要的位置。当Task 获得一个新财产,为了让事情变得有趣而失去了一个时,问题就出现了。
所以现在,Task 有 name,这是一个 NSString,但缺少 desc。此外,我添加了NSDate 类型的属性dateDue。然后启动模拟器。问题是未归档的是旧的Task 和旧的desc 属性,而不是新的dateDue。
我的initFromCoder 实际上考虑了当前类中不存在属性并且不尝试对其进行解码的情况。
有没有办法向 NSCoder 方法解释不是像我序列化对象时那样创建对象的精确副本(我意识到这是序列化/反序列化定义的一部分),而是允许我版本的灵活性?
谢谢
【问题讨论】:
标签: ios versioning nscoder