3

NSCodingを実装するObjective-Cクラスがあります。このクラスのインスタンスの表現をNSDictionaryの形式で返す必要があります。ここで、キーはプロパティ名であり、値はプロパティ値です。

Objective-Cでこの変換を行うにはどうすればよいですか?

4

3 に答える 3

9

NSObjectにはメソッドがありdictionaryWithValuesForKeys:ます。ドキュメントから:

指定された配列の各キーによって識別されるプロパティ値を含むディクショナリを返します。

対応する-setValuesForKeysWithDictionary:方法もあります。

NSCodingは、実際にはここでプレイすることはありません。

于 2012-05-10T18:22:07.750 に答える
3

サブクラスを作成するのは簡単なはずです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:し、辞書で必要なこのオブジェクトに送信します。

于 2012-05-10T18:27:33.647 に答える
0

アンドリューマドセンが言ったこと。ただし、NSCodingを使用する場合は、NSKeyedArchiverを使用してオブジェクトをNSDataオブジェクトにエンコードし、そのNSDataを辞書に配置する必要があります。ただし、それが懸念される場合は、人間が読める形式にはなりません。乾杯

編集:質問を読み直してください。辞書のkey:valuesを1:1で表現したいので、Andrewが言ったことです。NSCodingアプローチでは、オブジェクト全体が辞書キーの値として提供されます。だから、アンドリューに+1。

于 2012-05-10T18:26:50.323 に答える