iPhone - setValue:forkey: 未记录
Posted
技术标签:
【中文标题】iPhone - setValue:forkey: 未记录【英文标题】:iPhone - setValue:forkey: not documented 【发布时间】:2012-02-08 10:28:06 【问题描述】:我的代码中有这些行:
[defaults setValue:someValue forKey:@"someValue"];
[animationGroup setValue:@"someValue" forKey:@"someValue"]; // CAAnimationGroup
NSString* animName = [theAnimation valueForKey:@"someValue"]; // CAAnimation
但是阅读 Apple 参考文档:
https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html https://developer.apple.com/library/IOs/#documentation/GraphicsImaging/Reference/CAAnimationGroup_class/Introduction/Introduction.html https://developer.apple.com/library/IOs/#documentation/GraphicsImaging/Reference/CAAnimation_class/Introduction/Introduction.html#//apple_ref/occ/cl/CAAnimation我没有看到对这些方法的任何引用,即使是解析层次结构或符合的协议。他们从哪里来?是否允许使用它们?
【问题讨论】:
【参考方案1】:这些是键值编码方法;如果这些类与这些键的键值编码兼容,那么您可以毫无问题地使用它们。关于 Core Animation,CALayer
和 CAAnimation
都符合 KVC,详见this programming guide。如需更多一般信息,请参阅NSKeyValueCoding
非正式协议和Key-Value Coding Programming Guide。
【讨论】:
你知道为什么在这些类的“符合”部分没有引用 NSKeyValueCoding 协议吗?NSKeyValueCoding
是一个非正式协议,它被定义为NSObject
上的类别(参见NSKeyValueCoding.h
头文件),而不是显式协议,因为实现是可选的。【参考方案2】:
附带说明也让我感到困惑。上述链接之一提供:
CALayer 和 CAAnimation 都是符合键值编码的容器 类,允许您为任意键设置值。也就是说,虽然 键“someKey”不是 CALayer 类的声明属性, 但是您仍然可以为键“someKey”设置一个值
意味着您可以安全地发送类似 KVC 的 setValue:forKey: 和 valueForKey: 消息,而不必担心 @"someKey" 不是真正的 KVC 兼容属性(因此是“任意键”)。如果您在其他对象上尝试此操作,可能会引发异常。我承认我不确定如何轻松找出其他类是否有这种行为,在许多其他地方免费提供这种行为肯定会很有用。
【讨论】:
以上是关于iPhone - setValue:forkey: 未记录的主要内容,如果未能解决你的问题,请参考以下文章
setValue: forKey: 和 setValue: forKeyPath:
自定义核心数据访问器——setValue:forKey: vs. setPrimitiveValue:forKey:
NSMutableArray 的 setValue:forKey: 和 setObject:forKey: 有啥区别?
CKRecord setValue:forKey 或 setObject:forKey