在iPhone中填写模型类的正确做法

时间:2013-06-14 09:24:30

标签: iphone ios objective-c

我在填充模型类的过程中有一个简单的疑问。我得到一个web服务响应,其中包含一个jsonDictionary,其中包含10-15个(可以是任何数字)keyValue对。我通常使用另一个解析器类将此jSON解析为NSDictionary,并使用NSDictionary从视图控制器填充模型类。 但最近我在另一个代码中看到了。通过解析JSON字符串创建的NSDictionary将传递给具有静态方法的类。并且该模型从该类中的静态方法中填充,如下所示

班级名称: ModelMaker

静态方法例如:

+ (MyModel1 *)fillInMyModelFromDictionay:(NSDictionary *)myDictionary;
+ (MyModel2 *)fillInMyModel2FromDictionay:(NSDictionary *)myDictionary2;

+(MyModel1 *)fillInMyModelFromDictionay:(NSDictionary *)myDictionary 
{
    MyModel1 *myModel1 = [[MyModel1 alloc] init];
    myModel1.name = [myDictionary objectForKey:@"name"];
    myModel1.age = [myDictionary objectForKey:@"age"];
    return myModel1;
}

您认为哪种方法更好。从视图控制器本身填充我的模型对象,或者使用我上面显示的类,其唯一目的是填充模型对象。

2 个答案:

答案 0 :(得分:7)

如果字典中的键与模型对象的属性名称匹配,则可以使用NSObject方法- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues来完成所有工作。如果某些键不匹配,您仍然可以使用该方法,但在模型类中,您需要覆盖- (id)valueForUndefinedKey:(NSString *)key

有关更多信息,请查看Key-Value Coding Programming Guide

答案 1 :(得分:0)

一个选项(选项#1)是在模型类中使用initWithDictionary,这很好。 您的问题中的选项(选项#2)实际上是一个解析器,它具有所有模型的更高视图,因此当需要从不同的数据源(例如,不同的json响应)填充模型的属性时,它更灵活... 我认为选项#2是一个很好的做法。 但是,如果您的模型很简单并且json结构可以匹配您的模型,则可以始终使用选项#1。