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;
}
当使用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;
}
相关文章推荐
- - (void)setValue:(id)value forKey:(NSString *)key方法,实现原理与验证
- deque双向队列(转)
- 303. Range Sum Query - Immutable
- Request.getRequestURL
- iOS 限制UITextfield的字数
- UI控件(UIScrollView)
- 非UI线程处理Bitmap(官方文档)
- IOS开发之UIAlertController
- 常见的交互设计方法
- UESTC482-Charitable Exchange-bfs优先队列
- Max Sum of Max-K-sub-sequence(单调队列)
- UESTC1013-我的魔法栈-模拟/排列组合
- ZOJ-3210-A Stack or A Queue?【6th浙江省赛】
- 引用com.sencha.gxt.ui.GXT加载错误解决方案
- 虚幻UE4碰撞系统
- ios8 UITableView设置 setSeparatorInset UIEdgeInsetsZero不起作用的解决办法(去掉15px空白间距)
- 触摸事件以及UITouch UIEvent
- Qt Question List
- 334. Increasing Triplet Subsequence
- 1085. Perfect Sequence (25)