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