【问题标题】:How to handle '[<__NSCFString 0x2f1730> valueForUndefinedKey:]: this class is not key value coding-compliant for the key $oid' error如何处理'[<__NSCFString 0x2f1730> valueForUndefinedKey:]:这个类不是键值编码兼容键$oid'错误
【发布时间】:2012-01-06 07:45:59
【问题描述】:

我遇到了错误(在主题中说明),因为有时属性 'id' 不会在返回的 json 中存储包含 '$oid' 的哈希值。例如

有时我会得到:

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

有些时候我得到了

“id”:“4eea972209f47a0028000140”

我正在尝试检查以下代码以应对这种不规则情况

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

但是,由于代码在检查阶段失败,它仍然无法正常工作。

如何实施检查,以便仅在存在 '$oid' 的情况下才能获取 question_id?

【问题讨论】:

  • 你用的是什么 json 库?
  • 看起来它是一个由 mongo DB 后端提供的 API——负责 API 的人应该真正解决这个问题......

标签: objective-c ios undefined key-value-coding


【解决方案1】:

试试下面的代码。

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

【讨论】:

  • 我用散文回答,你在代码中给出了相同的答案!我们应该把它们合并成一个超级答案:)
【解决方案2】:

您需要检查[question valueForKey:@"id"] 返回的类型,有时它看起来像是一个字符串,有时它是另一个符合 KVC 的对象,适合您的另一个键。您的错误将出现在第一个 if 语句中。

【讨论】:

    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多