iOS KVC 是怎么通過(guò)value查找key的

//聯(lián)系人:石虎QQ:1224614774昵稱:嗡嘛呢叭咪哄

一、概念

1.ios獲取字典里的內(nèi)容并不區(qū)分它到底是什么類型(數(shù)組、字符、字典等等;

2.它就是一個(gè)容器。往里面保存東西的時(shí)候,用setValue:forKey:或者setObject:forKey:。

3.就是給你所要保存的對(duì)象(value),起一個(gè)名字(key),然后set進(jìn)入到字典里。

二、測(cè)試代碼

測(cè)試代碼:

如果訪問(wèn)器方法和實(shí)例變量都沒(méi)有找到,執(zhí)行setValue:forUndefinedKey:方法,該方法的默認(rèn)實(shí)現(xiàn)是產(chǎn)生一個(gè)?NSUndefinedKeyException?類型的異常,但是我們可以重寫setValue:forUndefinedKey:方法

[person setValue:@"美女"forKey:@"張瓊"];

崩潰錯(cuò)誤:

2017-12-0917:42:55.324620+0800dddd[86208:2255303] *** Terminating app due to uncaught exception'NSUnknownKeyException', reason:'[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key 張瓊.'

解決方法:

在Person.m文件中重寫?- (void)setValue:(id)value forUndefinedKey:(NSString *)key

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

{

NSLog(@"%s",__func__);

key =@"親";

//NSString *keyStr = key;

NSString*valueStr = value;

NSLog(@"keyStr==%@ ? valueStr= %@",key,valueStr);

}

再次運(yùn)行程序輸出結(jié)果:

2017-12-0917:47:03.794080+0800dddd[86306:2259407] -[Person setValue:forUndefinedKey:]

2017-12-0917:47:03.794206+0800dddd[86306:2259407] keyStr==親 ? valueStr= 美女

如圖1:

三、實(shí)例代碼:

1.//**********************Person.h 類

//? Copyright ? 2017年 石虎. All rights reserved.

//

#import

@interfacePerson :NSObject

@property(nonatomic,copy)NSString*name;

@property(nonatomic,assign)intage;

@end

2.//**********************Person.m 類

//? Copyright ? 2017年 石虎. All rights reserved.

//

#import"Person.h"

@implementationPerson

- (void)setName:(NSString*)name

{

_name= name;

NSLog(@"name--- %s? name = %@",__func__,name);

}

- (void)setAge:(int)age

{

_age= age;

NSLog(@"age-->> %s age = %d",__func__,age);

}

//重寫

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

{

NSLog(@"%s",__func__);

key =@"親";

//NSString *keyStr = key;

NSString*valueStr = value;

NSLog(@"keyStr==%@ ? valueStr= %@",key,valueStr);

}

@end

3.//**********************ViewController.m 類

#import"ViewController.h"

#import"Person.h"http://測(cè)試 kvc

- (void)test4

{

Person*person = [[Personalloc]init];

[personsetValue:@"石虎"forKey:@"name"];

[personsetValue:@10forKey:@"age"];

[personsetValue:@"美女"forKey:@"張瓊"];

//? ? [person valueForKey:@"name"];

//? ? NSLog(@"----- == %@",[person valueForKey:@"name"]);

}

4.效果圖:

謝謝!!!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • KVC(Key-value coding)鍵值編碼,單看這個(gè)名字可能不太好理解。其實(shí)翻譯一下就很簡(jiǎn)單了,就是指iO...
    朽木自雕也閱讀 1,693評(píng)論 6 1
  • 沙盒 Plist Preference偏好設(shè)置 NSKeyedArchiver歸檔 / NSKeyedUnarch...
    追風(fēng)者366閱讀 3,588評(píng)論 0 6
  • KCV 其實(shí)由于ObjC的語(yǔ)言特性,你根部不必進(jìn)行任何操作就可以進(jìn)行屬性的動(dòng)態(tài)讀寫,這種方式就是Key Value...
    TYM閱讀 1,136評(píng)論 0 4
  • 小和尚細(xì)細(xì)觀察了會(huì),發(fā)現(xiàn)東南方向不遠(yuǎn)處有一緩坡,爬過(guò)去橫穿幾叢灌木便可到達(dá)金黃竹筍處。他翻開(kāi)草藥,血止住了,...
    牛二2016閱讀 344評(píng)論 0 0
  • 前幾周和朋友聚會(huì),聊起情商的問(wèn)題。 她秉持世上其實(shí)沒(méi)有情商這東西,因?yàn)檫@只是人類賦予給它的意義,人的情商并無(wú)高低,...
    掃地_閱讀 241評(píng)論 3 9

友情鏈接更多精彩內(nèi)容