0

サーバーの応答を取得し、同期要求に対して以下のように解析しています。

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」のレスポンスが返ってきました。ここで何が間違っていますか?お知らせ下さい!

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

4

2 に答える 2

1

返された辞書にはネストのレベルがありません。あなたの応答は、値が別の辞書である「d」というキーが responseData に含まれており、その辞書には「応答」というキーがあることを示しています

ループ内で作業しているため、応答には「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");
        }
    }
}
于 2012-02-08T18:34:47.757 に答える
0

私には奇妙に思えますが、おそらく問題ではありませんが、

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

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

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

于 2012-02-08T18:23:52.690 に答える