【问题标题】:Using setValue:forKey to convert RESTful JSON objects to Application Objects?使用 setValue:forKey 将 RESTful JSON 对象转换为应用程序对象?
【发布时间】:2015-09-09 06:13:35
【问题描述】:

使用setValue:forKey转换应用对象

在我的应用程序中,我创建了一个 Patient 类(NSObject 的子类)

患者的 JSON 对象如下所示

{
"id":1,
"firstName":"Angel ",
"lastName":"Merkel",
"dob":"1989-08-31",
"address":"12 th, Cross street,"
"email":"merkal@gmail.com",
"cellNumber":"213-52578522”,
”ssn":"","maritalStatus":null,
"state":null,
"regularSmoker":false
}

所以我在下面列出的 patient.h 中创建了属性,就像 JSON 属性名称和属性名称一样(这样我就可以使用 setValueForKey

@property(nonatomic,assign)int idValue;// we cant declare property with name id
@property(nonatomic,strong)NSString *firstName;
@property(nonatomic,strong)NSString *lastName;
@property(nonatomic,strong)NSDate *dob;
@property(nonatomic,strong)NSString *address;
@property(nonatomic,strong)NSString *email;
@property(nonatomic,strong)NSString *cellNumber;
@property(nonatomic,strong)NSString *ssn;
@property(nonatomic,strong)NSString *maritalStatus;
@property(nonatomic,strong)NSString *state;
@property(nonatomic,strong)NSString *regularSmoker;

我使用setValuesForKeysWithDictionary: 方法将单个 JSON 对象转换为单个 Application 患者对​​象

转换时我必须处理以下两个问题

问题1准备处理setvalueForUnIdentified key,如果从服务器发送任何不需要的数据

-(void)setValue:(id)value forUndefinedKey:(NSString *)key
{
    NSLog(@"tried to set %@ for Object %@",key,self);
    [self.undefinedKeyValues setValue:value forKey:key]; // so that the unexpected key:value pairs stored
}

问题 2 在应用程序中从 JSON 对象转换为方便的数据类型,例如

  • NSStringNSDate 键入对象作为键“dob”

  • NSNumber 为“id”键的“int”类型

如下代码

-(void)setValue:(id)value forKey:(NSString *)key
{
    if([key isEqualToString:@“id”])
    {
        self.idValue=[value intValue];
    }
    else if ([key isEqualToString:@"gender"])
    {
        _gender=value;
       // Problem 2 handled
        if([value isEqualToString:@"Male"]) 
        {
            self.genderType=MALE;


        }
        else if ([value isEqualToString:@"Female"])
        {
            self.genderType=FEMALE;

        }
    }
    else if ([key isEqualToString:@“dob”])
    {
        /// convert the value to NSDate and assign
    }
    else
    {
        [super setValue:value forKey:key];
    }
}

我的问题是,我可以使用上述方式将 JSON 对象转换为应用程序对象吗?

【问题讨论】:

  • 这个问题是关于什么的:风格、安全性、正确性?你期待什么样的答案?可能不是一个是或否。那么它是关于意见的吗?
  • @NikolaiRuhe 我问的是代码的可维护性。我只想知道我是否可以使用 setValue:forKey 用于转换到应用程序 Object 的过程。我前辈的converson方式是object.propname=[dictionary objectForKey:@"key1"];object.propname2=[dictionary objectForKey:@"key2"];......这样继续下去,这个看起来很明显看到新的编码员做了什么,这就是我发布问题的原因

标签: ios objective-c json rest key-value-coding


【解决方案1】:

我建议你看看Mantle。它在 KVC 上具有相同的逻辑,可以让你的生活更轻松:)

【讨论】:

    猜你喜欢
    • 2017-10-17
    • 2013-02-06
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2016-04-24
    • 1970-01-01
    相关资源
    最近更新 更多