您的位置:首页 > 产品设计 > UI/UE

KVC之-(void)setValue:(id)value forUndefinedKey:(NSString *)key

2016-02-21 18:53 786 查看
错误信息大意是:类因为某个键的存在而不遵守NSKeyValueCoding协议。
当使用setValuesForKeysWithDictionary:方法时,对于数据模型中缺少的、不能与任何键配对的属性的时候,系统会自动调用setValue:forUndefinedKey:这个方法,该方法默认的实现会引发一个NSUndefinedKeyExceptiony异常。

如果想要程序在运行过程中不引发任何异常信息且正常工作,可以让数据模型类重写setValue:forUndefinedKey:方法以覆盖默认实现,而且可以通过这个方法的两个参数获得无法配对键值。
或者运用运行时取出模型属性的方法,进而判断属性是否存在
//运用运行时取出模型属性的方法

-(NSArray *)getModelProperties{

//模型属性的数量

unsigned int count;

objc_property_t *proprties = class_copyPropertyList(self.class,&count);

//定义一个数组,存放属性

NSMutableArray *array = [NSMutableArray array];

//根据属性个数取出每一个属性,并存放在一个数组中

for (int i = 0; i < count; i ++) {

//根据属性数组取出没有个属性值

objc_property_t pro = proprties[i];

//将属性名称取出来,取出的是c语言类型的

const char *name = property_getName(pro);

//将C语言的转换成OC类型的属性值

NSString *property = [[NSString alloc] initWithUTF8String:name];

//将取出来的属性存放到数组中

[array addObject:property];

}

return array;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: