- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力学习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 上发现了这个错误,但我还没有弄清楚它试图传达有关我的项目的哪些信息。我找不到解决方案之间的任何关联来理解此错误消息,因此我无法使用它来弄清楚我的代码中发生了什么。
所以,长话短说,我并不是真的在寻求有关我的代码具体错误的帮助,而是更多地试图找出这个错误消息的实际含义,这样我就可以自己找出问题;然而,这就是我正在尝试做的事情。如果您不仅能告诉我出了什么问题,还能告诉我为什么这个错误会出现在我正在做的事情上,那就太好了。
在这个特定的实例中,我有一个绑定(bind)到 ArrayController 的 TableView。 ArrayController 绑定(bind)到文件的所有者,以employees
(一个 NSMutableArray)作为其模型 key 路径。 employees
是 RMPerson
对象的数组,每个对象都有两个属性:personName
(NSString)和 expectedRaise
(一个 float )。表的第一列显示来自相应 RMPerson
的 personName
;我尝试根据挑战使用 personName
的长度对第一列进行排序。当我使用 personName
作为排序键并使用 caseInsensitiveCompare:
作为选择器对其进行排序时,一切都很好。当我使用 [personName valueForKeyPath:@"length"]
或 personName.length
作为排序键并使用 compare:
作为时,会出现此错误选择器。
最佳答案
What does “this class is not key value coding-compliant” mean?
什么都没有。
完整的异常消息使问题更有意义:
What does “this class is not key value coding-compliant for
<key>
” mean?
这意味着该类的对象没有名为 <key>
的属性,至少就键值编码而言,因此您无法使用 KVC 从中获取此类属性的值。
绑定(bind)(NSArrayController 是其中的重要组成部分)使用 KVC 来获取和设置绑定(bind)属性以及将它们绑定(bind)到的属性,因此尝试将某些内容绑定(bind)到不存在的属性将会出现此异常.
不过,您有一个特殊情况:
…RMPerson …: this class is not key value coding-compliant
for the key [personName valueForKeyPath:@"length"].
这意味着您尝试使用“[personName valueForKeyPath:@"length"]
” ”作为键。
严格来说,KVC 几乎会接受任何不带句点的键作为键,但实际上,很少有对象能够识别任何不是标识符的键,并且全部 其中(NSDictionary 除外)期望键至少是单个单词。 Objective-C 消息表达式不是有效 key ,不能成为 key 路径的一部分。
我猜你实际上粘贴了“[personName valueForKeyPath:@"length"]
” 到 Nib 中的“模型 key 路径”字段中 — 对于阵列 Controller 的 sortDescriptors
从表面上看,具有约束力。那是行不通的。模型关键路径字段需要单独的关键路径本身。
personName.length
将是一个有效的关键路径,但假设您的 RMPersons 的名称是字符串,则不会为您提供排序描述符数组,因此您可以预期数组 Controller 会因数字数组而阻塞。
无论您想做什么(按名称长度排序?),您都应该就此提出另一个问题。
When I sort it using
personName
as the sort key andcaseInsensitiveCompare:
as the selector, all is well. This error crops up when I use either[personName valueForKeyPath:@"length"]
orpersonName.length
as the sort key andcompare:
as the selector.
选择器并不重要。
注意某些东西是否需要关键路径或只是一个关键 - 区别很微妙,但非常重要。排序描述符需要一个键。
关于objective-c - "this class is not key value coding-compliant"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16454644/
我正在尝试使用 flot 绘制 SQL 数据库中的数据图表,这是使用 php 收集的,然后使用 json 编码的。 目前看起来像: [{"month":"February","data":482},
我有一个来自 php 行的 json 结果,类似于 ["value"]["value"] 我尝试使用内爆函数,但得到的结果是“value”“value” |id_kategori|created_at
脚本 1 将记录 two 但浏览器仍会将 select 元素呈现为 One。该表单还将提交值 one。 脚本 2 将记录、呈现和提交 两个。我希望它们是同义词并做同样的事情。请解释它们为何不同,以及我
我的python字典结构是这样的: ips[host][ip] 每行 ips[host][ip] 看起来像这样: [host, ip, network, mask, broadcast, mac, g
在 C# 中 我正在关注的一本书对设置和获取属性提出了这样的建议: double pri_test; public double Test { get { return pri_test; }
您可能熟悉 enum 位掩码方案,例如: enum Flags { FLAG1 = 0x1, FLAG2 = 0x2, FLAG3 = 0x4, FLAG4 = 0x8
在一些地方我看到了(String)value。在一些地方value.toString() 这两者有什么区别,在什么情况下我需要使用哪一个。 new Long(value) 和 (Long)value
有没有什么时候 var result = !value ? null : value[0]; 不会等同于 var result = value ? value[0] : null; 最佳答案 在此处将
我正在使用扫描仪检测设备。目前,我的条形码的值为 2345345 A1。因此,当我扫描到记事本或文本编辑器时,输出将类似于 2345345 A1,这是正确的条形码值。 问题是: 当我第一次将条形码扫描
我正在读取 C# 中的资源文件并将其转换为 JSON 字符串格式。现在我想将该 JSON 字符串的值转换为键。 例子, [ { "key": "CreateAccount", "text":
我有以下问题: 我有一个数据框,最多可能有 600 万行左右。此数据框中的一列包含某些 ID。 ID NaN NaN D1 D1 D1 NaN D1 D1 NaN NaN NaN NaN D2 NaN
import java.util.*; import java.lang.*; class Main { public static void main (String[] args) thr
我目前正在开发我的应用程序,使其设计基于 Holo 主题。在全局范围内我想做的是工作,但我对文件夹 values、values-v11 和 values-v14. 所以我知道: values 的目标是
我遇到了一个非常奇怪的问题。 我的公司为我们的各种 Assets 使用集中式用户注册网络服务。我们一般通过HttpURLConnection使用请求方法GET向Web服务发送请求,通过qs设置参数。这
查询: UPDATE nominees SET votes = ( SELECT votes FROM nominees WHERE ID =1 ) +1 错误: You can't specify
如果我运行一段代码: obj = {}; obj['number'] = 1; obj['expressionS'] = 'Sin(0.5 * c1)'; obj['c
我正在为我的应用创建一个带有 Twitter 帐户的登录页面。当我构建我的项目时会发生上述错误。 values/strings.xml @dimen/abc_text_size_medium
我在搜索引擎中使用以下 View : CREATE VIEW msr_joined_view AS SELECT table1.id AS msr_id, table1.msr_number, tab
为什么验证会返回此错误。如何解决? ul#navigation li#navigation-3 a.current Value Error : background-position Too
我有一个数据名如下 import pandas as pd d = { 'Name' : ['James', 'John', 'Peter', 'Thomas', 'Jacob', 'Andr
我是一名优秀的程序员,十分优秀!