2012-02-08 8 views
0

私の同期要求では、以下のようにサーバーの応答と解析が行われています。iPhone:レスポンス辞書の解析に関する問題:

NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonError]; 
NSLog(@"responseDict: %@", responseDict); 

結果は以下の通りです:

responseDict: { 
d =  { 
    Datavalue = 1; 
    "__type" = "Response:#DummyAPI"; 
    response = OK; 
}; 

私は上記の結果を解析しようとしています、それは「OK」であれば、私はどこかに「DataValueは」を格納したい... 私がしようとしています

-(void) handleResponse :(NSDictionary *) responsedata // it is being passed from caller 
{ 
    NSString* value = NULL; 

    for (id key in responsedata) 
    { 
     value = (NSString*)[responsedata objectForKey:@"response"]; 

     if ([value isEqualToString:@"OK"]) 
     { 
      NSLog(@"RESPONSE SUCCESS, need to store data value"); 
     } 
     else 
     { 
      NSLog(@"INVALID RESPONSE"); 
     } 
    } 
} 

しかし、常に「INVALID RESPONSE」と表示されますが、「OK」と表示されます。私はここで間違って何をしていますか?お知らせ下さい!

ありがとうございました!

答えて

1

戻ってきた辞書にはネスティングのレベルがありません。あなたの応答は、responseDataに値が別の辞書である "d"というキーが含まれており、その辞書は "応答"と呼ばれるキーであることを示しています。

あなたはループ内で作業しているので、 "d"だけでなくトップレベルに複数の値があり、それらのそれぞれをループしようとしています。その前提に基づいて、おそらく次のようなものが必要です。

-(void) handleResponse :(NSDictionary *) responsedata // it is being passed from caller 
{ 
    NSString* value = NULL; 

    for (id key in responsedata) 
    { 
     NSDictionary *currentDict = (NSDictionary *) [responseData objectForKey:key]; 
     value = (NSString*)[currentDict objectForKey:@"response"]; 

     if ([value isEqualToString:@"OK"]) 
     { 
      NSLog(@"RESPONSE SUCCESS, need to store data value"); 
     } 
     else 
     { 
      NSLog(@"INVALID RESPONSE"); 
     } 
    } 
} 
0

は私には奇妙なようで、おそらく問題ではなく、次のとおりです。

value = (NSString*)[responsedata objectForKey:@"response"]; 

if ([value isEqualToString:@"OK"]){ 
    NSLog(@"RESPONSE SUCCESS, need to store data value"); 
} 
else{ 
    NSLog(@"INVALID RESPONSE"); 
} 

forループ内で行われていないはずです。 forループの外側でそのコードを試してみてください。うまくいくはずです。あなたがやってみたいかもしれない他のものは@"response"の値を超えてisKindOfClassメソッドを呼び出すことで、それは文字列であると言う何かを得るべきです。

関連する問題