是否存在将任何Object转换为NSDictionary的通用实现,将所有变量名称设置为键和值作为字典值?
答案 0 :(得分:4)
为了实现您的目标,您可以使用键值编码。该协议提供了一种机制,可以根据表示为NSString的属性的名称来设置对象属性的值,而不是直接调用访问器。
为了使其工作,您需要使用遵循命名约定的访问器定义对象(使用属性很容易)。您可以在此处查看NSKeyValueCoding协议指南:
这里的键值编码编程指南:
你仍然需要进行迭代,但这是一个好的开始。
答案 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可以从字符串重新创建字典。最好的是你提供自己的序列化方法。