2013-06-14 2 views
2

У меня есть простые сомнения в процессе заполнения моего класса модели. Я получаю ответ веб-службы, в котором есть jsonDictionary с 10-15 (это может быть любая цифра) пары keyValue. Я обычно использовал для разбора этого jSON в NSDictionary с использованием другого класса парсера, и я заполняю класс модели с контроллера вида, используя NSDictionary. Но недавно я увидел в другом коде. NSDictionary, созданный при разборе строки JSON, передается классу с статическими методами. И модель наполнена внутри статического метода в этом классе, как показано нижеПравильная практика заполнения класса модели в iPhone

Имя класса: 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; 
} 

Так какой подход вы думаете, лучший. Заполнение моего объекта модели из самого контроллера представления или использование класса, как я показал выше, единственной целью которого является заполнение объектов модели.

ответ

7

Если ключи в вашем словаре соответствуют именам свойств вашего объекта модели, вы можете использовать метод NSObject - (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues, который сделает всю работу за вас. Если некоторые из клавиш не совпадают, вы все равно можете использовать этот метод, но в классе модели вам необходимо переопределить - (id)valueForUndefinedKey:(NSString *)key.

Для получения дополнительной информации проверьте Key-Value Coding Programming Guide.

0

Один вариант (вариант # 1) - использовать initWithDictionary в вашем классе модели, что хорошо. Вариант в вашем вопросе (вариант № 2) - это действительно синтаксический анализатор, который имеет более высокий обзор всех моделей, поэтому он более гибкий, если свойства модели необходимо заполнять из разных источников данных (например, разные ответы json) ... Я считаю, что вариант № 2 - хорошая практика. Однако, если ваша модель проста и структура json может соответствовать вашей модели, тогда всегда можно использовать опцию # 1.

Смежные вопросы