respondsToSelector:为选择器返回true但setValue:forKey:由于未定义的键而失败

时间:2013-05-11 11:37:41

标签: ios objective-c respondstoselector

我正在尝试利用键值编码将数据分配给小型模型类的实例:

SEL selectorName = NSSelectorFromString(elementName);
if ([self.fixtureItem respondsToSelector:selectorName])
{
    [self.fixtureItem setValue:self.currentElementData forKey:elementName];
}

elementName为“说明”时,respondsToSelector:会返回true,但setValue:forKey:会引发NSUnknownKeyException

  

由于未捕获的异常'NSUnknownKeyException'而终止应用,   原因:'[setValue:forUndefinedKey:]:this   class不是密钥描述的密钥值编码兼容。'

为什么respondsToSelector:返回true但setValue:forKey:然后报告关键'描述'实际上是未定义的?

2 个答案:

答案 0 :(得分:3)

因为您的对象确实响应了选择器@selector(description),但没有回复@selector(setDescription:),这是setValue:forKey:最终会调用的内容。

答案 1 :(得分:2)

虽然您的对象确实响应了选择器description(因为所有NSObject - 派生对象都有),但描述不是 settable 。您传递的选择器用于获取器description,而不是用于设置器setDescription: