引言
KVC幫助我們實現了很多原本難以實現的事情,比如改變AlertAction的字體顏色,大小等,但是在不同的iOS版本中,Key值也會發(fā)生改變,所以我們在賦值之前應該先做出判斷是key是否存在,不然很可能就會因為使用了無效key而看見如下的提示
this class is not key value coding-compliant for the key ***.
不過可惜的是,iOS并沒有直接提供contain這種方法來判斷,所以我們只能自行去獲取
如果你是用的字典這種常見的類型,那么恭喜你,可以直接通過valueForKey來判斷是否存在值即可,但是如果他是一個NSObjc對象呢?比如UIAlertAction?如果你直接使用valueForKey,那么恭喜你,會和setValueForKey一樣,拋出上圖的異常
解決方法:
根據OC的動態(tài)特性,利用Runtime去解決這個問題,查找他的ivars中是否存在這個key,從而達到曲線救國的目的
代碼
- (BOOL)key:(NSString *)key existInClass:(Class)metaClass{ unsigned int count = 0; BOOL exist = NO; Ivar *ivars = class_copyIvarList(metaClass, &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; }
感謝閱讀這篇文章,轉載請注明出處.