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 放入字典中。但是,如果这是令人担忧的,那将不是人类可读的。干杯

编辑:重新阅读您的问题,这确实是 Andrew 所说的,因为您想要 1:1 表示字典中的键:值 - NSCoding 方法将为您提供整个对象作为字典键的值。所以,+1 给安德鲁。

于 2012-05-10T18:26:50.323 回答