
Key-value Coding(KVC)机制允许set(设置)和get(获取)变量值。这里的变量名可能是一个字符串,也就是Key。例如,类Company拥有一个类型为Nsstring,叫做companyname的变量。
@interface Company : NSObject{ Nsstring *companyname;} 我们就可以这样设置和获取Company实例的companyname值:
//设置值Company *company = [[Company alloc] init];[company setValue:@"Apple" forkey:@"companyname"]; //获取值Nsstring *x = [company valueForKey:@"companyname"];
实例setValue:forKey和valueForKey:的方法在NSObject中有定义。
创建名为KVCFun的项目,新建名为AppController的Objective-C Class文件。
AppController.h和AppController.m的代码分别如下:
#import <Foundation/Foundation.h> @interface AppController : NSObject {@private int fIDo; } - (int) fIDo;- (voID) setFIDo:(int) x; - (IBAction) incrementFIDo: (ID)sender; @end
#import "AppController.h" @implementation AppController - (ID)init{ self = [super init]; if (self) { //设置Key [self setValue:[NSNumber numberWithInt:5] forKey:@"fIDo"]; NSNumber *n = [self valueForKey:@"fIDo"]; NSLog(@"fIDo = %@",n); } return self;} - (int) fIDo{ NSLog(@"-fIDo is returning %d",fIDo); return fIDo;} - (voID) setFIDo:(int) x{ NSLog(@"-setFIDo is called with %d",x); fIDo = x;} - (IBAction) incrementFIDo:(ID)sender{ //当直接修改值时,通知观察者 [self willChangeValueForKey:@"fIDo"]; fIDo++; NSLog(@"fIDo is Now %d",fIDo); [self dIDChangeValueForKey:@"fIDo"];} - (voID)dealloc{ [super dealloc];} @end
打开MainMenu.nib,添加一个SlIDer、一个Label、一个button控件,如下图:
将SlIDer的Attributes Inspector->Control->State设为“连续的”,再把Binding Inspector->value邦定到AppController实例的fIDo key上。
将Label也邦定到AppController上,Model Key Path设为fIDo。
button链接到incrementFIDo:action上。
@property和@synthesize
我们可以使用property来代替fIDo和setFIDo,并且使用synthesize来实现存取方法。
使用下面的代码替换AppController.h中的fIDo和setFIDo:
@property (reaDWrite,assign) int fIDo;
使用@synthesize来替换fIDo和setFIDo,程序可以正常运行。
总结以上是内存溢出为你收集整理的cocoa's Key-value coding全部内容,希望文章能够帮你解决cocoa's Key-value coding所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)