參考文檔: 《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方法)。看看控制檯的輸出吧。