Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用setValue:forKey将RESTful JSON对象转换为应用程序对象?_Ios_Objective C_Json_Rest_Key Value Coding - Fatal编程技术网

Ios 使用setValue:forKey将RESTful JSON对象转换为应用程序对象?

Ios 使用setValue:forKey将RESTful JSON对象转换为应用程序对象?,ios,objective-c,json,rest,key-value-coding,Ios,Objective C,Json,Rest,Key Value Coding,使用setValue:forKey转换应用程序对象 在我的应用程序中,我创建了一个Patient类(NSObject的子类) patient的JSON对象如下所示 { "id":1, "firstName":"Angel ", "lastName":"Merkel", "dob":"1989-08-31", "address":"12 th, Cross street," "email":"merkal@gmail.com", "cellNumber":"213-52578522”, ”ssn"

使用
setValue:forKey
转换应用程序对象

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

patient的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

我使用
setValuesForKeysWithDictionary:
方法将单个JSON对象转换为单个应用程序患者对象

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

问题1如果从服务器发送任何不需要的数据,请准备处理未识别密钥的设置值

-(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对象转换为方便的数据类型,如

  • NSString
    NSDate
    键入键“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对象转换为应用程序对象吗?

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

这个问题是关于什么的:风格、安全性、正确性?你期望得到什么样的答案?“可能没有一个是或不是。那么这是关于观点吗?”NikolaiRuhe I询问代码可维护性方面的问题。我只是想知道我是否可以使用setValue:forKey用于转换到应用程序对象的过程。我前辈的对话方式类似于object.propname=[dictionary objectForKey:@“key1];object.propname2=[dictionary objectForKey:@“key2”];。。。。。。接下来,这个问题对于新的程序员来说是显而易见的,这就是我为什么要提出这个问题的原因
-(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];
    }
}