2

在填充模型类的过程中,我有一个简单的疑问。我得到一个 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;
}

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

4

2 回答 2

7

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

有关更多信息,请查看键值编码编程指南

于 2013-06-14T09:40:21.877 回答
0

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

于 2014-10-13T00:15:31.423 回答