版本之间的序列化

时间:2015-02-06 07:09:25

标签: ios objective-c

如何对在新版本中修改过的对象进行反序列化。


例如
我的项目版本1.0中有一个人类 应用程序终止时,Person对象数组被序列化

@interface Person : NSObject <NSCoding>
    @property NSString *name;
    @property NSUInteger age;
    @property NSString *location;
@end

这就是我序列化数据的方式

- (void)serializePersonList {
    NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:personList];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:encodedObject forKey:kPersonKey];
    [defaults synchronize];
}

现在我打算发布第2版。而Person Class已经发展到

@interface Person : NSObject <NSCoding>
    @property NSString *name;
    @property NSUInteger age;
    @property NSString *phone;
    @property KSAddress *location;
@end

请注意

  • 已将位置类型更新为KSAddress
  • 手机属性已添加。

如何让我的应用程序反序列化旧的Person数据?

1 个答案:

答案 0 :(得分:0)

希望您使用的是密钥存档程序。您编写代码以将每个密钥的归档数据连接到它所属的实例变量。当您更改了类型时,您的代码现在需要将数据读入id局部变量,检查数据类型(isKindOfClass),然后存储该值或将其转换为新格式然后存储它