键值编码说明

Posted

技术标签:

【中文标题】键值编码说明【英文标题】:Key Value Coding clarification 【发布时间】:2014-03-29 23:02:57 【问题描述】:

从 Apple 的文档中,我发现了以下内容:

使用键路径设置值与使用设置值不同 Objective-C 属性。您不能使用属性表示法来设置 转换值。您必须使用 setValue:forKeyPath: 方法 前面的关键路径字符串。

据我了解,我们必须拥有 ivars 的属性才能使用 KVC。

但从上段来看,似乎另有说法:

使用键路径设置值与使用设置值不同 Objective-C 属性。您不能使用属性表示法来设置 转换值。

谁能给我解释一下为什么?也许我遗漏了一些东西,因为一直以来我的理解是我们必须具有使用 KVC 的属性。

【问题讨论】:

我认为它只是说这行不通:setValue:value forKey:@"view.transform。你必须使用setValue:value forKeyPath:@view.transform @ScottBerrevoets 你的意思是没有双引号但保留 @ 符号? 对不起,我的错字。我的意思是forKeyPath 部分,而不是forKey @ScottBerrevoets 抱歉,没听懂。你的意思是:setValue:value forKeyPath:view.transform?这行不通。 来自developer.apple.com/library/mac/documentation/cocoa/reference/…: keyPath 形式为relationship.property(具有一个或多个关系)的关键路径:例如“department.name”或“department.manager.lastName”。 你不能在setValue:forKey: 中做“department.name”,你需要setValue:forKeyPath: 【参考方案1】:

据我了解,我们必须拥有 ivars 的属性才能使用 KVC。

这是不正确的。 KVC 将使用属性生成的访问器方法,或其他(适当命名的)访问器方法(如果存在),但不是必需的。如果它们不存在,KVC 将尝试直接访问实例变量。

查看this Apple ref,了解 KVC 如何搜索要更新的密钥的描述。

【讨论】:

谢谢,但是什么是"..其他(适当命名的)访问器方法"?你能举个例子吗? 对于只设置set: 方法实际上是有效的,那么实例变量名匹配模式_, _is, , or is, 在那个顺序。

以上是关于键值编码说明的主要内容,如果未能解决你的问题,请参考以下文章

URL编码与解码

URL编码与解码

URL编码与解码

URL编码与解码

URL编码与解码

SQL注入防御绕过——二次编码之干掉反斜杠