-2

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

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:]:此类不符合键描述的键值编码。”

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

4

2 回答 2

3

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

于 2013-05-11T11:42:02.727 回答
2

尽管您的对象确实响应选择器description(因为所有NSObject派生对象都响应),但描述不是settable。您传递的选择器是用于 getter 的description,而不是用于 setter 的setDescription:

于 2013-05-11T11:42:33.490 回答