Как обрабатывать «[‹__NSCFString 0x2f1730› valueForUndefinedKey:]: этот класс не соответствует кодированию значения ключа для ошибки ключа $oid»

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

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

"id":{"$oid":"4eea972209f47a0028000140"}

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

«id»: «4eea972209f47a0028000140»

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

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

Однако он по-прежнему не работает, так как код дает сбой на этапе проверки.

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


person Zhen    schedule 06.01.2012    source источник
comment
какую библиотеку json вы используете?   -  person Radu    schedule 06.01.2012
comment
Похоже, что это API, предоставляемый серверной частью mongo DB — тот, кто отвечает за API, действительно должен это исправить…   -  person Tony Million    schedule 06.01.2012


Ответы (2)


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

id quesDict = [question valueForKey:@"id"];
if( [quesDict isKindOfClass:[NSDictionary class]] )
{
    question_id = [quesDict valueForKey:@"$oid"];
}
else
{
    question_id = quesDict;
}
person Ilanchezhian    schedule 06.01.2012
comment
Я ответил прозой, ты же дал кодом! Мы должны объединить их, чтобы сделать один супер-ответ :) - person jrturton; 06.01.2012

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

person jrturton    schedule 06.01.2012