JSON情報を異なるオブジェクトに動的にマップしようとしています。しかし、私はポインタの状況をコントロールする方法を理解することはできません。Objective-C DRY JSONマッピングとオブジェクト作成
私の方法論では、各オブジェクトの辞書を作成し、変数ポインタを同等のJSONキーにマッピングしています。私のJSONマッパーではparseJSONFromDictionary:withObject
というメソッドがあり、SBJSONのJSONValueによって返されたディクショナリを反復処理し、指定されたオブジェクトの適切な変数に適切な値を割り当てます。
-(NSObject *)parseJSONFromDictionary:(NSDictionary *)dict withObject:(NSObject *)start{
for (NSString *key in dict) {
if ([[self.mappings objectForKey:key] isMemberOfClass:[NSString class]]) {
start.[self.mappings objectForKey:key] = [[dict valueForKey:key] stringValue];
}
}
return start;
}
mappings
変数とJSONのキーを持っている辞書で、dict
は、JSONパーサから返されるものです。
大きな問題は、私がstart.[self.mappings objectForKey:key]
を行うことができないということです。私はCについてあまりよく分かりませんが、明らかに私はポインタについて十分に分かっていないので、このようなシステムを作るにはどうしたらいいですか?私はそれが正しい方法ではないことを知っていますが、正しい方法は何ですか? RestKitがそれをしますが、OAuthをサポートしていないので、私は悲しいことに彼らの素敵なフレームワークを使用できません。
私がこのルートに向かう理由は、現在作業しているAPIが現在アルファステージにあるためです。私は、多くのコード行を書き直すことなく、将来の変更に容易に適応できるようにしたいと考えています。私はまた、DRY-lyをプログラミングしたいと思っています。私はJSONの構文解析が非常に反復的であることを知っています。オーバーヘッドの量を減らす方法を探したいと思います。
ありがとうございました!
EDIT:私が求めているものになど、いくつかの混乱があるようです。 I はJSONの解析に役立ちません。私はすでにSBJSONを使用しています。私は要求を助ける必要がありません、私はすでにJDG's OAuthConsumer frameworkを使用していません。 I はのみOAuth 2.0をサポートするフレームワークを使用できます。
私はがこれ防ぐ方法考え出す助けが必要なん:だからあなたは1つのメソッドにメソッドのこれらの種類を組み合わせる方法についての提案があれば私に知らせてください
-(Class1 *)parseJsonForClass1:(NSString *)inputString {
NSDictionary *outputDict = [inputString JSONValue];
Class1 *instance1 = [self mapObjectsForClass1From:outputDict];
return instance1;
}
-(Class2 *)parseJsonForClass2:(NSString *)inputString {
NSDictionary *outputDict = [inputString JSONValue];
Class2 *instance2 = [self mapObjectsForClass2From:outputDict];
return instance2;
}
-(Class3 *)parseJsonForClass3:(NSString *)inputString {
NSDictionary *outputDict = [inputString JSONValue];
Class2 *instance3 = [self mapObjectsForClass3From:outputDict];
return instance3;
}
-(Class1 *)mapObjectsForClass1From:(NSDictionary *)dict {
Class1 *object1 = [[Class1 alloc] init];
object1.name = [[dict valueForKey:@"name"] stringValue];
object1.date = [[dict valueForKey:@"date"] stringValue];
object1.objId = [[dict valueForKey:@"id"] intValue];
return object1;
}
-(Class2 *)mapObjectsForClass2From:(NSDictionary *)dict {
Class2 *object2 = [[Class2 alloc] init];
object2.something = [[dict valueForKey:@"something"] stringValue];
object2.title = [[dict valueForKey:@"title"] stringValue];
object2.imageUrl = [[dict valueForKey:@"image_url"] stringValue];
return object2;
}
-(Class3 *)mapObjectsForClass3From:(NSDictionary *)dict {
Class3 *object3 = [[Class3 alloc] init];
object3.foo = [[dict valueForKey:@"bar"] stringValue];
object3.flag = [[dict valueForKey:@"is_member"] boolValue];
object3.obj1 = [[Class1 alloc] init];
object3.obj1 = [self mapOjectsForClass1From:[dict objectForKey:@"name1"]];
return object3;
}
を...
https://github.com/RestKit/RestKitを見ましたか? – Brenden
私はRestkitを見ていました。私はそれが何をしたか気に入らず、私はまだしません。私の人生では、RestKitがループ内のオブジェクトを膨張させるよりも、完全なメモリ割り当て曲線を見たことはありません。 – MishieMoo