我正在通过Cocoa Programming for Mac OS X (4th Edition)努力工作,并且像许多其他人一样,我遇到了挑战;具体来说,第 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
(an NSMutableArray) 作为其模型键路径。employees
是一个RMPerson
对象数组,每个对象都有两个属性:(personName
一个 NSString)和expectedRaise
(一个浮点数)。表格的第一列显示personName
了各自的RMPerson
; 我正在尝试根据personName
挑战使用长度对第一列进行排序。当我使用personName
排序键和caseInsensitiveCompare:
选择器对其进行排序时,一切都很好。当我使用[personName valueForKeyPath:@"length"]
orpersonName.length
作为排序键和compare:
选择器时,会出现此错误。