Object-c学习笔记十七-----键值编码

Object-c学习笔记十七-----键值编码,第1张

概述Cocoa提供的一种特性,将键/值编码称为KVC。 键/值编码中的基本调用包括-valueForKey:和-setValue:forkey:。 NSString *name=[car valueForKey:@"name"]; NSLog(@"%@",name); 这相当于一个get方法。当使用ValueForKey时,它自动将标量值(int,float和struct)放入NSNumber或NSV

Cocoa提供的一种特性,将键/值编码称为KVC。

键/值编码中的基本调用包括-valueForKey:和-setValue:forkey:。

Nsstring *name=[car valueForKey:@"name"];

NSLog(@"%@",name);

这相当于一个get方法。当使用ValueForKey时,它自动将标量值(int,float和struct)放入NSNumber或NSValue中;当使用setValueForKey时它自动将标量值从这些对象中取出。

编辑器和苹果都以下划线开都的形式保存实例变量名称,我们尽可能的不要用下划线开头形式命名。

键/值编码还支持路径。@engine.horsepower。


将前面的Car项目添加部分属性main函数修改成如下:

    Car *car =[[[Caralloc] init]autorelease];

    car.name=@"HerbIE";

    car.make=@"Honda";

    car.model=@"CRX";

    car.numberofDoors=2;

    car.modelyear=1984;

    car.mileage=110000;

    

    for(int i=0;i<4;i++)

    {

       AllWeatherRadial *tire;

        tire=[[AllWeatherRadialalloc] init];      

        [car setTire:tire atIndex:i];

        [tire release];

    }

    

    Slant6 *engine=[[[Slant6 alloc]init]autorelease];

    car.engine=engine;


这里是键/值对使用

   NSNumber *count;

    count=[garage valueForKeyPath:@"cars.@count"];

   NSLog(@"we have %@ cars",count);

    NSNumber *sum;

sum = [garagevalueForKeyPath:@"cars.@sum.mileage"];

NSLog (@"We have a grand total of %@ miles",sum);

NSNumber *avgMileage;

avgMileage = [garagevalueForKeyPath: @"cars.@avg.mileage"];

NSLog (@"average is %.2f",[avgMileagefloatValue]);

NSNumber *min,*max;

min = [garagevalueForKeyPath:@"cars.@min.mileage"];

max = [garagevalueForKeyPath:@"cars.@max.mileage"];

NSLog (@"minimax: %@ / %@",min,max);

 我们可以在这里引用一些特殊运算符来进行计算,可以计算某些特定值的总和。


但是KVC需要解析字符串来计算你需要的答案,因此速度比较慢,但是编译器不能对它进行错误检查。不能判断它是否是错误的键路径。

nil值会报一个Could not set nil as the value for the key mileage错误。

所以要重写setNilValueForKey。还有一个处理未定义的键,this class is not key value Coding-compliant for the key garbanzo.

添加一个可变字典

- (voID) setValue: (ID) value  forUndefinedKey: (Nsstring *) key {

if (stuff ==nil) {

stuff = [[NSMutableDictionaryalloc] init];

}

[stuffsetValue: value forKey: key];

}// setValueForUndefinedKey


- (ID) valueForUndefinedKey:(Nsstring *)key {

ID value = [stuffvalueForKey: key];

return (value);

}// valueForUndefinedKey

总结

以上是内存溢出为你收集整理的Object-c学习笔记十七-----键/值编码全部内容,希望文章能够帮你解决Object-c学习笔记十七-----键/值编码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1064905.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存