第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

iOS菜鳥成長季—— KVC進(jìn)階(二)

標(biāo)簽:
iOS
前言

上篇文章大致阐述了KVC在key正确情况下的执行过程,这篇来说说key错误时KVC是如何运行的。

正文

如果传入一个错误的key会怎样?


JKTest

错误的key

运行结果

可以看到,程序在2次尝试匹配新的key无果后,抛出异常[<JKTest 0x7f9801519f50> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key jack.

回到NSKeyValueCoding.h可以找到这个方法,与之对应的还有另一个方法

- (void)setValue:(id)value forUndefinedKey:(NSString *)key;
- (id)valueForUndefinedKey:(NSString *)key;

上述方法见名知意,显然可以在这里做点手脚

重定向

这样KVC又可以正常工作了。来看一下执行过程,由于没有key,每次赋值\取值都会2次重新匹配key,发现匹配不到正确的key后执行上述两个方法。可以看到,这个过程不会执行object的getter和setter(倒数第二的getter是NSLog(@"%@", test.object);执行的,用来查看是否赋值成功)。

结合上篇文章,此时如果实现jack的setter和getter会怎样?

新增

没错,直接找到key对应的getter和setter,不会去匹配新key,更不用执行上述的两个重定向方法

KVV

KVV(key value validate),KVC中还提供键值验证,即KVV

- (BOOL)validateValue:(inout id *)ioValue forKey:(NSString *)inKey error:(out NSError **)outError;

这个方法系统不会主动调用,并且默认实现为- (BOOL)validate<Key>:error:,口说无凭,上代码

KVV

正确

错误

除此之外,KVC中还有一个方法可以处理错误

- (void)setNilValueForKey:(NSString *)key;

他在KVC赋值时,key为NSNumber(基本数据类型会自动转为NSNumber)或NSValue(结构体需手动转成NSValue)时调用,再举个例子

setNil

运行结果

另外,也可在各种数据转模型框架中看到KVC中将基本数据类型自动转为NSNumber的影子,如MJExtension

點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消