你的位置:首页 > 操作系统

[操作系统]iOS学习之KVC原理


1. KVC的实现原理

  • 遍历字典里面所有的key,以name为例
  •  去模型中查找有没有setName:方法,有就直接调用赋值

  •  假如没有找到setName:方法,就会继续查找有没有_name属性,有就_name = value赋值

  •  假如没有找到_name,还会继续查找模型中有没有name属性

  •  最终没有找到,就会直接报错

  报错信息:


  • 当我们需要的属性的类型和得到的数据的类型不同,解决办法:重写属性的setter方法(根据KVC的查找顺序可知)

  假如在视图中需要一张图片,但是得到的数据中一般是图片名,也就是一个 NSString * 类型的数据,具体解决办法请看代码

#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>@interface ZFFlag : NSObject@property (nonatomic, strong) NSString *name;@property (nonatomic, strong) UIImage *icon;// 重写icon的setter方法,注意类型为得到的数据中该属性的类型- (void)setIcon:(NSString *)icon{  _icon = [UIImage imageNamed:icon];}// 防崩- (void)setValue:(id)value forUndefinedKey:(NSString *)key{  }@end

#import "ZFFlagView.h"#import "ZFFlag.h"@interface ZFFlagView ()@property (weak, nonatomic) IBOutlet UILabel *label;@property (weak, nonatomic) IBOutlet UIImageView *imageView;@end@implementation ZFFlagView- (void)setFlag:(ZFFlag *)flag{  _flag = flag;    // 给子控件赋值  _label.text = flag.name;  _imageView.image = flag.icon;}@end