Как обработать '[<__ NSCFString 0x2f1730> valueForUndefinedKey:]: этот класс не соответствует значению ключа, кодирующему для ошибки $ oid' - PullRequest
2 голосов
/ 06 января 2012

Я получаю сообщение об ошибке (указано в теме), поскольку в некоторых случаях свойство id не хранит хеш, содержащий $ oid, в возвращенном json Например

Иногда я получаю:

"идентификатор": { "$ подъязычная": "4eea972209f47a0028000140"}

Иногда я получаю

"идентификатор": "4eea972209f47a0028000140"

Я пытаюсь выполнить проверку в следующем коде, чтобы справиться с такой ошибкой

if ([[question valueForKey:@"id"] valueForKey:@"$oid"])
{
    question_id = [[question valueForKey:@"id"] valueForKey:@"$oid"];
}
else
{
    question_id = [question valueForKey:@"id"];
}

Тем не менее, он по-прежнему не работает, так как код не выполняется во время фазы проверки.

Как я могу реализовать проверку, чтобы я брал question_id из '$ oid', только если он существует?

Ответы [ 2 ]

5 голосов
/ 06 января 2012

Попробуйте следующий код.

id quesDict = [question valueForKey:@"id"];
if( [quesDict isKindOfClass:[NSDictionary class]] )
{
    question_id = [quesDict valueForKey:@"$oid"];
}
else
{
    question_id = quesDict;
}
3 голосов
/ 06 января 2012

Вам нужно проверить, какой тип возвращается [question valueForKey:@"id"], похоже, что иногда это строка, а иногда это другой объект, совместимый с KVC для вашего другого ключа.Ваша ошибка будет в самом первом операторе if.

...