Objective c NSObject子类是否可以;钩入;访问每个属性

Objective c NSObject子类是否可以;钩入;访问每个属性,objective-c,key-value-coding,Objective C,Key Value Coding,我有一个对象,我将其序列化以保存到磁盘,并且在升级我的应用程序时偶尔会添加新属性(想想应用程序prefs)。旧对象上不存在新属性,因此[myObj myNewProperty]的计算结果自然为零。我想更改它,以便可以返回相关的内容,最好在不重写每个属性的getter的情况下返回。这样做可能吗?解码对象时,可以设置默认值: - (id)initWithCoder:(NSCoder *)aDecoder { self.myNewProperty = [aDecoder decodeObjec

我有一个对象,我将其序列化以保存到磁盘,并且在升级我的应用程序时偶尔会添加新属性(想想应用程序prefs)。旧对象上不存在新属性,因此
[myObj myNewProperty]
的计算结果自然为零。我想更改它,以便可以返回相关的内容,最好在不重写每个属性的getter的情况下返回。这样做可能吗?

解码对象时,可以设置默认值:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self.myNewProperty = [aDecoder decodeObjectForKey:@"myNewProperty"];
    if(!self.myNewProperty)
    {
        self.myNewProperty = ...(The new value here!);
    }
    return self;
}

您可以在序列化时记录版本,在反序列化时返回,然后可以检查您是访问旧版本对象还是具有以下附加属性的新版本对象

#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
}

看一下运行时编程指南,它确实有效,但我正在寻找一种更自动/可重用的方法,在这种方法中,我可以动态地引用属性。