我正在尝试利用键值编码将数据分配给小型模型类的实例:
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:
然后报告关键'描述'实际上是未定义的?
答案 0 :(得分:3)
因为您的对象确实响应了选择器@selector(description)
,但没有回复@selector(setDescription:)
,这是setValue:forKey:
最终会调用的内容。
答案 1 :(得分:2)
虽然您的对象确实响应了选择器description
(因为所有NSObject
- 派生对象都有),但描述不是 settable 。您传递的选择器用于获取器description
,而不是用于设置器setDescription:
。