我有一个对象,我将其序列化以保存到磁盘,偶尔会在升级我的应用程序时添加新属性(想想app prefs)。旧对象上不存在新属性,因此[myObj myNewProperty]
自然会评估为nil。我想改变这个,所以我可以返回一些相关的东西,最好这样做而不会覆盖每个属性的getter。这样的事情有可能吗?
答案 0 :(得分:2)
您可以在解码对象时设置默认值:
- (id)initWithCoder:(NSCoder *)aDecoder
{
self.myNewProperty = [aDecoder decodeObjectForKey:@"myNewProperty"];
if(!self.myNewProperty)
{
self.myNewProperty = ...(The new value here!);
}
return self;
}
答案 1 :(得分:0)
您可以在序列化时记录版本并在反序列化时返回,然后您可以检查您是否正在访问旧版本对象或具有其他属性的新版本对象
#define kVersionKey @"Version"
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeInt:1 forKey:kVersionKey];
// other encoding
}
- (id)initWithCoder:(NSCoder *)decoder {
int i=[decoder decodeIntForKey:kVersionKey];
if (i==1) {
// set your new property
}
// other decodings
}