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

您在收到的字典中缺少一层嵌套。您的回复显示 responseData 包含一个名为“d”的键,其值是另一个字典,而该字典具有一个名为“response”的键

因为您在循环中工作,所以我假设您的响应可以在顶层包含多个值而不仅仅是“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 回答