OC循环渐进:KVC的其它操作

在KVC中,当你传入的一个字符串键值不存在时,程序会直接报错,那么如何避免这个问题呢?
我们可以在类中重写以下两个方法:
- (void)setValue:(id)value forUndefinedKey:(NSString *)key
- (id)valueForUndefinedKey:(NSString *)key
接下来我们就来使用以下以上两个方法:
1.定义一个Student类
Student.h 的文件代码如下:

#import <Foundation/Foundation.h>

@interface Student : NSObject

@end

Student.m 的文件代码如下:

#import "Student.h"

@implementation Student

- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
    NSLog(@"设置时使用不存在的键值:%@",key);
}

- (id)valueForUndefinedKey:(NSString *)key {
    NSLog(@"调用时使用不存在的键值:%@",key);
    return nil;
}

@end

2.main.m文件的输出
main.m的文件代码如下:

#import <Foundation/Foundation.h>
#import "Student.h"


int main(int argc, const char * argv[]) {
    @autoreleasepool {

        Student *stu = [[Student alloc] init];
//使用不存在的键值
        [stu setValue:@"张三" forKey:@"name"];
        [stu valueForKey:@"name"];

    }
    return 0;
}

测试结果如下:

2015-08-08 11:58:05.167 Demo[532:25965] 设置时使用不存在的键值:name
2015-08-08 11:58:05.171 Demo[532:25965] 调用时使用不存在的键值:name

除此之外,还有KVC中还有以下两个很重要的方法:
- (id)valueForKeyPath:(NSString *)keyPath;
- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;
1.使用- (id)valueForKeyPath:(NSString *)keyPath 方法如下:
main.m文件代码如下:

#import <Foundation/Foundation.h>
#import "Student.h"


int main(int argc, const char * argv[]) {
    @autoreleasepool {

//创建多个字典
        NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"张三",@"name",@"15",@"age",nil];
        NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"李四",@"name",@"16",@"age",nil];
        NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"王五",@"name",@"17",@"age",nil];

//定义一个数组
        NSArray *array= [NSArray arrayWithObjects:dict1,dict2,dict3,nil];

//数组使用KVC过滤
        array = [array valueForKeyPath:@"name"];

//数组输出
        for (NSString *str in array) {
            NSLog(@"name = %@",str);
        }

    }
    return 0;
}

测试结果如下:

2015-08-08 12:15:39.780 Demo[541:29205] name = 张三
2015-08-08 12:15:39.785 Demo[541:29205] name = 李四
2015-08-08 12:15:39.785 Demo[541:29205] name = 王五

2.’-(void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues’主要用于UI中的字典转模型,在UI中再介绍
至此,KVC中的常见用法以及全部讲完!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值