KVC (Key -Value Coding)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章