键值编码(KVC)-处理不存在的key和处理nil值

//

//  main.m

//  处理不存在的key和处理nil

//

//  Created by Goddog on 15/1/3.

//  Copyright (c) 2015 Goddog. All rights reserved.

//

/*

 1.处理不存在的key:(1)如果操作属性时即没有对应的settergetter方法,也不存在对应的成员变量。

                 (2)KVC自动调用setValue:forUndefinedKey:valueForUndefinedKey: 方法。

                 (3)通过重新方法处理机制即可。

 2.处理nil值:(1)如果属性基本类型是(intfloatdouble)且传入对应的参数,如果设置一个nil,就异常。

             (2)KVC自动调用setNilValueForKey方法实现

             (3)通过重新方法处理机制即可。

 */


#import <Foundation/Foundation.h>

//接口部分
@interface Item : NSObject
//使用@property 定义两个成员变量
@property (nonatomic,copy) NSString* name;
@property (nonatomic,assign) int price;
@end

//实现部分
@implementation Item

//重写setValue:forUndefinedKey:方法,处理不存在的key赋值问题
-(void) setValue:(id)value forUndefinedKey:(NSString *)key
{
    NSLog(@"您尝试设置的key: %@ 不存在",key);
    NSLog(@"您尝试设置的value: %@",value);
}

//重写valueForUndefinedKey:方法,处理不存在的key获值问题
//-(void) valueForUndefinedKey: (id)key
//{
//    NSLog(@"您尝试访问的key:%@并不存在",key);
//}

//重写setNilValueForKey方法来处理设置nil问题
-(void) setNilValueForKey:(NSString *)key
{
    //如果设置为空的话就处理
    if([key isEqualToString:@"price"])
    {
        //设置为0
        _price = 0;
    }
    else
    {
        //回调默认的方法
        [super setNilValueForKey:key];
    }
}

@end

//测试部分
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //创建对象
        Item* item = [[Item alloc] init];
        
        //无key
        [item setValue:@"时间" forUndefinedKey:@"time"];
        //[item valueForKey:@"time"];
        
        //设nil
        [item setValue:nil forKey:@"name"];
        [item setValue:nil forKey:@"price"];
        NSLog(@"名字是:%@, 价格是:%@",[item valueForKey:@"name"],[item valueForKey:@"price"]);
    }
    return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值