NSCodingを実装するObjective-Cクラスがあります。このクラスのインスタンスの表現をNSDictionaryの形式で返す必要があります。ここで、キーはプロパティ名であり、値はプロパティ値です。
Objective-Cでこの変換を行うにはどうすればよいですか?
NSCodingを実装するObjective-Cクラスがあります。このクラスのインスタンスの表現をNSDictionaryの形式で返す必要があります。ここで、キーはプロパティ名であり、値はプロパティ値です。
Objective-Cでこの変換を行うにはどうすればよいですか?
NSObjectにはメソッドがありdictionaryWithValuesForKeys:
ます。ドキュメントから:
指定された配列の各キーによって識別されるプロパティ値を含むディクショナリを返します。
対応する-setValuesForKeysWithDictionary:
方法もあります。
NSCodingは、実際にはここでプレイすることはありません。
サブクラスを作成するのは簡単なはずですNSCoder
。そのサブクラスのencode<thing>:forKey:
メソッドは、sを辞書に貼り付けるだけthing
で、それを取得できます。
@implementation DriisDictCoder
{
NSMutableDictionary * encodedDict;
}
- (void)encodeDouble: (double)v forKey: (NSString *)k {
[codedDict addObject:[NSNumber numberWithDouble:v] forKey:k];
}
// etc.
// Custom method
- (NSDictionary *)dictForEncodedObject {
return encodedDict;
}
@end
次に、コーダーのインスタンスを作成encodeWithCoder:
し、辞書で必要なこのオブジェクトに送信します。
アンドリューマドセンが言ったこと。ただし、NSCodingを使用する場合は、NSKeyedArchiverを使用してオブジェクトをNSDataオブジェクトにエンコードし、そのNSDataを辞書に配置する必要があります。ただし、それが懸念される場合は、人間が読める形式にはなりません。乾杯
編集:質問を読み直してください。辞書のkey:valuesを1:1で表現したいので、Andrewが言ったことです。NSCodingアプローチでは、オブジェクト全体が辞書キーの値として提供されます。だから、アンドリューに+1。