使用KVC从model取值,取到model中没有的key时就会崩溃。
报错:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<GSSmartCardHeaderModel 0x102b7b940> valueForUndefinedKey:]: this class is not key value coding-compliant for the key .'
找到一种判断方式
#import "NSObject+HaveKey.h"
#import <objc/runtime.h>
@implementation NSObject (HaveKey)
- (BOOL)modelHaveKey:(NSString *)key {
Class curClass = [self class];
unsigned int count = 0;
BOOL exist = NO;
Ivar *ivars = class_copyIvarList(curClass, &count);
for (int i = 0; i < count; i++) {
Ivar ivar = ivars[i];
NSString *keyName = [NSString stringWithCString:ivar_getName(ivar) encoding:NSUTF8StringEncoding];
if ([keyName rangeOfString:key].length > 0) {
exist = YES;
}
}
return exist;
}
@end
使用
- (void)showInfoWihtModel:(GSSmartCardHeaderModel *)model {
if (model) {
BOOL result = [model modelHaveKey:_dataModel.key];
if (result) {
NSString *value = [model valueForKey:_dataModel.key];
if ([value isKindOfClass:[NSString class]]) {
_contentText.text = value;
}
}
}
}