将对象转换为NSDictionary

时间:2011-04-20 08:04:46

标签: objective-c cocoa-touch ios4 iphone-sdk-3.0

是否存在将任何Object转换为NSDictionary的通用实现,将所有变量名称设置为键和值作为字典值?

4 个答案:

答案 0 :(得分:4)

为了实现您的目标,您可以使用键值编码。该协议提供了一种机制,可以根据表示为NSString的属性的名称来设置对象属性的值,而不是直接调用访问器。

为了使其工作,您需要使用遵循命名约定的访问器定义对象(使用属性很容易)。您可以在此处查看NSKeyValueCoding协议指南:

http://bit.ly/es6kyH

这里的键值编码编程指南:

http://bit.ly/fBY3Qa

你仍然需要进行迭代,但这是一个好的开始。

答案 1 :(得分:3)

使用SBJSONParser解决,将NSObject转换为JSON表示,然后从中获取NSDictionary。

答案 2 :(得分:1)

执行此操作的最佳方法是使用库进行序列化/反序列化 有很多图书馆,但我喜欢的是 JagPropertyConverter https://github.com/jagill/JAGPropertyConverter

它可以将您的Custom对象转换为NSDictionary,反之亦然

假设

@interface Person : NSObject

@property (nonatomic, retain) NSNumber * age
@property (nonatomic, retain) NSString * address
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * cellNo;

@end

JAGPropertyConverter *converter = [[JAGPropertyConverter alloc]init];
converter.classesToConvert = [NSSet setWithObjects:[Person class], nil];

Person *person = [[Person alloc]init];
person.name = @"name";
person.address = @"address";
person.age = @27;
person.cellNo = @"XXXXXXXXXX";

//For Object to Dictionary 
NSDictionary *dictPerson = [converter convertToDictionary:person];


//For Dictionary to Object 
Person *person = [[Person alloc]init];
[converter setPropertiesOf:person fromDictionary:dictPerson];

答案 3 :(得分:0)

不,你可以拥有课堂上的所有内容,例如:对其他对象和基元的引用。 NS-Dictionary可以将自身序列化为NSString,NSString可以从字符串重新创建字典。最好的是你提供自己的序列化方法。