---------------
FKItem.h ---------------
#import
<Foundation/Foundation.h>
@interface
FKItem : NSObject
@property ( nonatomic , copy ) NSString* name;
@property ( nonatomic , assign ) int price;
@property ( nonatomic , copy ) NSString* name;
@property ( nonatomic , assign ) int price;
@end
---------------
FKItem.m ---------------
#import
"FKItem.h"
@implementation
FKItem
- ( void )setNilValueForKey: ( id )key
{
- ( void )setNilValueForKey: ( id )key
{
if([key isEqualToString:@"price"])
{
_price = 0;
}
else
{
[super setNilValueForKey: key];
}
}
@end
---------------
main.m
---------------
#import
<Foundation/Foundation.h>
#import
"FKItem.h"
int
main()
{
FKItem* item = [[FKItem alloc] init];
[item setValue: nil forKey: @"name" ];
[item setValue: nil forKey: @"price" ];
NSLog( @"item 的 name 为: %@" , [item valueForKey: @"name" ]);
NSLog( @"item 的 price 为: %@" , [item valueForKey: @"price" ]);
{
FKItem* item = [[FKItem alloc] init];
[item setValue: nil forKey: @"name" ];
[item setValue: nil forKey: @"price" ];
NSLog( @"item 的 name 为: %@" , [item valueForKey: @"name" ]);
NSLog( @"item 的 price 为: %@" , [item valueForKey: @"price" ]);
}
一、编写本节代码的具体步骤:
1.可仿照
第二章
001节的代码编写步骤。
二、本节代码涉及到的知识点:
1.如果我们使用KVC给一个基本数据类型的成员变量设置一个nil值,KVC会自动调用setNilValueForKey方法。
2.
不过,这个方法的实现必须由我们自己来写,如果我们不写,系统还是会报错。
3.
这个方法可以不声明,因为只要写了方法的实现,KVC就会自动找到它。
4.我们在写
setNilValueForKey方法的实现的时候,可以自行决定nil值如何处理。
5.在本节代码中,给name赋nil值是合理的,输出正常。给price赋nil值是不合理的,应该转成0或其他数值。