iOS KVC 是怎么通過value查找key的

//聯系人:石虎QQ:1224614774昵稱:嗡嘛呢叭咪哄

一、概念

1.ios獲取字典里的內容并不區分它到底是什么類型(數組、字符、字典等等;

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

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

二、測試代碼

測試代碼:

如果訪問器方法和實例變量都沒有找到,執行setValue:forUndefinedKey:方法,該方法的默認實現是產生一個?NSUndefinedKeyException?類型的異常,但是我們可以重寫setValue:forUndefinedKey:方法

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

崩潰錯誤:

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);

}

再次運行程序輸出結果:

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

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

如圖1:

三、實例代碼:

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://測試 kvc

- (void)test4

{

Person*person = [[Personalloc]init];

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

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

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

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

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

}

4.效果圖:

謝謝!!!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • KVC(Key-value coding)鍵值編碼,單看這個名字可能不太好理解。其實翻譯一下就很簡單了,就是指iO...
    朽木自雕也閱讀 1,591評論 6 1
  • 沙盒 Plist Preference偏好設置 NSKeyedArchiver歸檔 / NSKeyedUnarch...
    追風者366閱讀 3,404評論 0 6
  • KCV 其實由于ObjC的語言特性,你根部不必進行任何操作就可以進行屬性的動態讀寫,這種方式就是Key Value...
    TYM閱讀 1,065評論 0 4
  • 小和尚細細觀察了會,發現東南方向不遠處有一緩坡,爬過去橫穿幾叢灌木便可到達金黃竹筍處。他翻開草藥,血止住了,...
    牛二2016閱讀 320評論 0 0
  • 前幾周和朋友聚會,聊起情商的問題。 她秉持世上其實沒有情商這東西,因為這只是人類賦予給它的意義,人的情商并無高低,...
    掃地_閱讀 199評論 3 9