我在填充模型类的过程中有一个简单的疑问。我得到一个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;
}
您认为哪种方法更好。从视图控制器本身填充我的模型对象,或者使用我上面显示的类,其唯一目的是填充模型对象。
答案 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。