【问题标题】:Convert an object into NSDictionary将对象转换为 NSDictionary
【发布时间】:2011-04-20 08:04:46
【问题描述】:

是否有任何通用实现可以将任何 Object 转换为 NSDictionary,将所有变量名设置为键,将值设置为字典值?

【问题讨论】:

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


【解决方案1】:

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

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

http://bit.ly/es6kyH

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

http://bit.ly/fBY3Qa

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

【讨论】:

    【解决方案2】:

    使用 SBJSONParser 解决,将 NSObject 转换为 JSON Representation,然后从中取出 NSDictionary。

    【讨论】:

    【解决方案3】:

    做到这一点的完美方法是使用用于序列化/反序列化的库 有很多图书馆可用,但我喜欢的一个是 JagPropertyConverter https://github.com/jagill/JAGPropertyConverter

    它可以将您的自定义对象转换为 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];
    

    【讨论】:

      【解决方案4】:

      不,你可以在课堂上拥有一切,例如对其他对象和原语的引用。 NS-Dictionary 可以将自己序列化为 NSString 并且 NSString 可以从字符串重新创建字典。最好是您提供自己的方法来序列化它。

      【讨论】:

        猜你喜欢
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2014-02-15
        • 2011-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-17
        相关资源
        最近更新 更多