【发布时间】:2016-12-30 21:04:35
【问题描述】:
我正在完成Mac OS X 的Cocoa 编程(第4 版),并且和许多其他人一样,我遇到了挑战;具体来说,第 8 章,挑战 1。我自己无法找到解决方案,我从 Life as Clay 博客中找到了一些帮助。我在那里添加了解决方案,但出现以下错误:
2013-05-09 00:28:49.049 RaiseMan[58078:303] Error setting value for key path sortDescriptors of object <NSArrayController: 0x7fcee2a51900>[object class: RMPerson, number of selected objects: 1] (from bound object <NSTableView: 0x7fcee2a48750>): [<RMPerson 0x7fcee1c5c870> valueForUndefinedKey:]: this class is not key value coding-compliant for the key [personName valueForKeyPath:@"length"].
问题是,在试图找出问题所在时,我已经看到 StackOverflow 上到处出现这个错误,我还没有辨别出它试图传达的关于我的项目的哪些信息。我找不到解决方案之间的任何关联来理解此错误消息,因此我无法使用它来弄清楚我的代码中发生了什么。
所以,长话短说,我并不是真的在寻求关于我的代码有什么特别错误的帮助,而是更多地试图找出这个错误消息的实际含义,这样我就可以自己找出问题所在;但是,这就是我正在尝试做的事情。如果您不仅可以告诉我出了什么问题,还可以告诉我为什么这个错误适用于我正在做的事情,那就太好了。
在这个特定的例子中,我有一个绑定到 ArrayController 的 TableView。 ArrayController 绑定到文件的所有者,employees(一个 NSMutableArray)作为它的模型键路径。 employees 是一个 RMPerson 对象数组,每个对象都有两个属性:personName(一个 NSString)和expectedRaise(一个浮点数)。表格的第一列显示来自各自RMPerson 的personName;我正在尝试根据挑战使用personName 的长度对第一列进行排序。当我使用personName 作为排序键并使用caseInsensitiveCompare: 作为选择器对其进行排序时,一切都很好。当我使用[personName valueForKeyPath:@"length"] 或personName.length 作为排序键并使用compare: 作为选择器时,会出现此错误。
【问题讨论】:
-
乍一看,这可能意味着您尝试使用的对象
setValue:forKey:没有以名称为键的属性/实例变量。
标签: objective-c cocoa debugging runtime-error