У меня есть объект, который соответствует NSCoding (и архивируется на диск). Одно свойство этого объекта (myMetrics) является NSDictionary. В новой версии программного обеспечения мне нужно добавить ключ к этому словарю, но мне нужно сделать это до того, как остальная часть приложения использует основной объект, так как он является обязательным ключом.Лучший способ миграции из NSDictionary в Object
Моя мысль была сделать что-то вроде:
-(id)initWithCoder:(NSCoder *)coder
{
if (self = [super init])
{
self.myMetrics = [coder decodeObjectForKey:@"myMetrics"];
... other properties go here ....
}
.... add the new key to myMetrics with default value if it is missing in myMetrics ...
return (self);
}
То, что я действительно хотел бы сделать, это конвертировать myMetrics из словаря в его собственном классе. Я не уверен, как я буду обрабатывать это для архивных объектов, которые уже существуют. Моя мысль была:
- добавить новое свойство класса NewMetrics, называемое newMetrics.
- в initWithCoder, если найдено свойство myMetrics, переместите его данные в свойство newMetrics.
- в encodeWithCoder обрабатывает только newMetrics и никогда не переустанавливает старый словарь.
Таким образом, программное обеспечение использует объекты NewMetrics повсюду, но initWithCoder способен обрабатывать старые методы myMetrics.
Есть ли хороший способ сделать это, сохранив одно и то же имя свойства?
@property (atomic, retain) NSDictionary* myMetrics; // dictionary of parameters
becomes
@property (atomic, retain) NewMetrics* myMetrics; // parameters
rather than
@property (atomic, retain) NewMetrics* newMetrics; // parameters
Есть ли лучший способ?
Вы вызываете свой новый класс 'NewMetrics' в некоторых местах и' MyMetrics' в других. Не могли бы вы изменить свой вопрос, чтобы использовать тот или иной? –
Извините, что это исправлено. – Trygve