字典分为不可变字典(NSDictionary)和可变字典(NSMutableDictionary)
/* 不可变字典 */
1.创建字典
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:
@"male",@"sex",
@"20", @"age",
@"Tom", @"name",
@"run", @"hobby", nil];
2.获取所有的key值和value值
[dic allKeys];
[dic allValues];
3.根据key值来获取value值
[dic valueForKey:@"name"];
[dic objectForKey:@"name"];
// 写法2 不可以写 nil, 写法1可以4.遍历字典
NSArray *arr = [dic allKeys];
for (int i = 0; i < [arr count]; i++) {
NSString *key = [arr objectAtIndex:i];
[dic objectForKey:key];
}
for (NSString *key in dic) {
NSString *value = [dic objectForKey:key];
}
//写法2虽然写的是遍历字典,实际上还是遍历数组[dic allKeys];
/* 可变字典 */
NSMutableDictionary *mDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"male",@"sex",
@"20", @"age",nil];
2.增加键值对
[mDic setValue:@"Tom" forKey:@"name"];
[mDic setObject:@"Running" forKey:@"hobby"];
3.修改键值对
[mDic setValue:@"18" forKey:@"age"];
//跟2.增加键值对方法是一样的, 这个key值要是有就覆盖掉原来的value, 如果没有这个key值就相当于新添加一对键值对
4.删除键值对
[mDic removeObjectForKey:@"age"];
[mDic setValue:nil forKey:@"age"];
OC中 继承于 NSObject 的这些类统称 model 类 (用于存取字符串)
model类更像可变字典
例题1 把下列格式的输出用字典-数组嵌套的形式写出, 并转成model类的形式
(
{
body = {
"message" ="错误信息";
"errorcode" ="1";
};
header = (
{
"page" =@"10";
"title" =@"婚纱";
"content" =@"fwefasd";
"image" = (
@"http://www.hunliji.com1",
@"http://www.hunliji.com2",
@"http://www.hunliji.com3"
);
}
);
}
)
[1]字典-数组嵌套
NSMutableArray *bigArray = [NSMutableArray array];
NSMutableDictionary *bigDic = [NSMutableDictionary dictionary];
[bigArray addObject:bigDic];
NSMutableDictionary *bodyDic = [NSMutableDictionary dictionary];
[bodyDic setObject:@"错误信息" forKey:@"message"];
[bodyDic setObject:@"1" forKey:@"errorcode"];
[bigDic setObject:bodyDic forKey:@"body"];
NSMutableArray *headerArray = [NSMutableArray array];
[bigDic setObject:headerArray forKey:@"header"];
NSMutableDictionary *little = [NSMutableDictionary dictionary];
[headerArray addObject:little];
[little setObject:@"10" forKey:@"page"];
[little setObject:@"婚纱" forKey:@"title"];
[little setObject:@"fwefasd" forKey:@"content"];
NSMutableArray *images = [NSMutableArray array];
[images addObject:@"http://www.hunliji.com1"];
[images addObject:@"http://www.hunliji.com2"];
[images addObject:@"http://www.hunliji.com3"];
[little setObject:images forKey:@"image"];
[2] model类的形式
//建立model类要从结构里往外建立
1.建立HeaderModel
@interface HeaderModel : NSObject
{
@public
NSString *_page;
NSString *_title;
NSString *_content;
NSMutableArray *_imageArray;
}
2.建立BodyModel
@interface BodyModel : NSObject
{
@public
NSString *_message;
NSString *_errorcode;
}
3.建立BigModel
@class BodyModel;
@interface BigModel : NSObject
{
@public
BodyModel *_body;
NSMutableArray *_headerArray; // 数组中存headermodel对象
}</span>
4.建立了一个工具类Tools将功能进行封装
.h
<span style="font-size:18px;">@class BigModel;
@interface Tools : NSObject
+ (BigModel *)getBigModel;
.m#import "Tools.h"
#import "BigModel.h"
#import "BodyModel.h"
#import "HeaderModel.h"
@implementation Tools
+ (BigModel *)getBigModel
{
BigModel *big = [[BigModel alloc] init];
big->_body = [[BodyModel alloc] init];
big->_body->_message = @"错误信息";
big->_body->_errorcode = @"10";
big->_headerArray = [NSMutableArray array];
HeaderModel *header = [[HeaderModel alloc] init];
[big->_headerArray addObject:header];
header->_content = @"fjaowief";
header->_imageArray = [NSMutableArray array];
[header->_imageArray addObject:@"http://www.hunliji.com1"];
[header->_imageArray addObject:@"http://www.hunliji.com1"];
[header->_imageArray addObject:@"http://www.hunliji.com1"];
header->_page = @"10";
header->_title = @"婚纱";
return big;
}
+ (NSString *)getValueFrom:(NSMutableArray *)array key:(NSString *)content
{
BigModel *b = [array firstObject];
HeaderModel *header = [b->_headerArray firstObject];
NSString *my = header->_content;
return my;
}
main.m
NSMutableArray *bigArray = [NSMutableArray array];
BigModel *b1 = [Tools getBigModel];
[bigArray addObject:b1];
BigModel *b2 = [Tools getBigModel];
[bigArray addObject:b2];
/*KVC */
key - value - coding
1. 给属性赋值:
[dic setValue:<#(id)#> forKey:<#(NSString *)#>];
2. 最大的用处: 字典和model 的转换
3.通过字典给model 赋值:
<span style="font-size:14px;"> [model setValuesForKeysWithDictionary:<#(NSDictionary *)#>];</span>
必须在model类里重写:
<span style="font-size:14px;">-(void)setValue:(id)value forKey:(NSString *)key</span>
空着就可以, 如果没有定义这个属性, 就什么都不用写