最常见的真实生活键值编码示例
密钥值编码使用 NSKeyValueCoding 协议集成到 NSObject 中。 ****
这意味着什么?
这意味着任何 id 对象都能够调用 valueForKey 方法及其各种变体,如 valueForKeyPath 等。
它还意味着任何 id 对象都可以调用 setValue 方法及其各种变体。
例:
id obj = [[MyClass alloc] init];
id value = [obj valueForKey:@"myNumber"];
int myNumberAsInt = [value intValue];
myNumberAsInt = 53;
[obj setValue:@(myNumberAsInt) forKey:@"myNumber"];
例外:
上面的例子假设 MyClass 有一个名为 myNumber 的 NSNumber 属性。如果 myNumber 没有出现在 MyClass 接口定义中,则可能会在第 2 行和第 5 行引发 NSUndefinedKeyException - 通常称为:
this class is not key value coding-compliant for the key myNumber.
为什么这是如此强大:
你可以编写可以动态访问类属性的代码,而无需该类的接口。这意味着表视图可以显示来自 NSObject 派生对象的任何属性的值,前提是其属性名称是在运行时动态提供的。
在上面的示例中,代码也可以在没有 MyClass 可用的情况下工作,并且 id 类型 obj 可用于调用代码。