我有一个实现 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 放入字典中。但是,如果这是令人担忧的,那将不是人类可读的。干杯
编辑:重新阅读您的问题,这确实是 Andrew 所说的,因为您想要 1:1 表示字典中的键:值 - NSCoding 方法将为您提供整个对象作为字典键的值。所以,+1 给安德鲁。