Возможно ли для подкласса NSObject "подключаться" к каждому доступу к свойству
У меня есть объект, который я сериализирую для сохранения на диск, и иногда при обновлении моего приложения добавляются новые свойства (например, prefs приложения). Новое свойство не будет существовать на старом объекте, поэтому, естественно, [myObj myNewProperty]
оценил бы до нуля. Я хочу изменить это, чтобы я мог вернуть что-то релевантное, и желательно делать это, не переопределяя геттер для каждого свойства. Это возможно?
2 ответа
Вы можете установить значение по умолчанию при декодировании вашего объекта:
- (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
}