参考文档: 《Cocoa Programming for Mac OS X 4》
键-值编码(Key-Value Coding,KVC)是通过变量名读取和设置变量值的一种机制,变量的名字是字符串,但是作为Key来使用。
例如
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *name;
}
@end
就可以使用如下来设置和获取类Person的实例成员变量 name.
Person *p = [[Person alloc]init];
//设置name
[p setValue:@"newName" forKey:@"name"];
//读取name
NSString *newName = [p valueForKey:@“name”];
接下来看看KVC在实际编码中的强大威力
绑定(binding)
Cocoa中很多图形对象都使用绑定,当开发者绑定一个键到一个图像对象的属性上时,例如绑定键(颜色)到图形的颜色,显示视图就会自动同步,接下来写一个小的Demo,来展示:
随意创建一个Cocoa程序,在AppDelegate.h中 添加 int类型的实例变量sliderNumber
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
{
int sliderNumber;
}
//然后使用accessor方法来设置和读取sliderNumber的值,
//此处不使用@property,更多内容后面将提到
- (int)sliderNumber;
- (void)setSliderNumber:(int)x;
@property (assign) IBOutlet NSWindow *window;
@end
在AppDelegate.m中则对accessor方法实现,并且给出值的打印
- (int)sliderNumber;
{
NSLog(@"sliderNumber returned value is %d",sliderNumber);
return sliderNumber;
}
- (void)setSliderNumber:(int)x;
{
NSLog(@"setSliderNumber is called with %d",x);
sliderNumber = x;
}
再打开MainMenu.xib拖一个滑动条到View上,并且对滑动条进行设置,如图所示
首先勾选上Control中的Continuous(为了让滑动条拖动的时候,数值一直改变,而不是停止了再获取数据)
然后勾选上Bind To App Delegate,下面的Model Key Path当然就是self.sliderNumber了
编译运行程序,滑动条使用 valueForKey来获取它的初始值,这触发了(sliderNumber方法),当滑动条移动式,调用setValue:forKey来更新sliderNumber的值(这就出发了 setSliderNumber方法)。看看控制台的输出吧。