私はNSCodingに準拠した(そしてディスクにアーカイブされている)オブジェクトを持っています。このオブジェクトの1つのプロパティ(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という名前のクラスの新しいプロパティを追加しました。
- myWebCoderでmyMetricsプロパティが見つかった場合、そのデータをnewMetricsプロパティに移動します。
- in 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