2

モデルクラスにデータを入力するプロセスに単純な疑問があります。jsonDictionary に 10 から 15 (任意の数字を指定できます) の keyValue ペアを含む Web サービス応答を取得します。私は通常、別のパーサー クラスを使用してこの 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

ディクショナリのキーがモデル オブジェクトのプロパティ名と一致する場合は、- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValuesすべての作業を行う NSObject メソッドを使用できます。一部のキーが一致しない場合でも、そのメソッドを使用できますが、モデル クラスではオーバーライドする必要があります- (id)valueForUndefinedKey:(NSString *)key

詳細については、Key-Value Coding Programming Guide を確認してください。

于 2013-06-14T09:40:21.877 に答える
0

1 つのオプション (オプション #1) は、モデル クラスで initWithDictionary を使用することです。これは問題ありません。あなたの質問のオプション(オプション#2)は、実際にはすべてのモデルのより高いビューを持つパーサーであるため、モデルのプロパティをさまざまなデータソース(たとえば、さまざまなjson応答)から設定する必要がある場合により柔軟になります...私は思うオプション #2 は良い方法です。ただし、モデルが単純で、json 構造がモデルと一致する場合は、常にオプション #1 を使用できます。

于 2014-10-13T00:15:31.423 に答える