iPhone: проблема с анализом словаря ответов: - PullRequest
0 голосов
/ 08 февраля 2012

Я получаю ответ сервера и синтаксический анализ, как показано ниже для моего синхронного запроса.

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».Что я здесь не так делаю?Пожалуйста, сообщите!

Спасибо!

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Вам не хватает уровня вложенности в словарях, которые вы получили обратно.Ваш ответ показывает, что 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");
        }
    }
}
0 голосов
/ 08 февраля 2012

Мне кажется странным и, вероятно, это не проблема, но:

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", и вы должны получить что-то, говорящее, что это строка.

...