//聯(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.效果圖: