NSDictionary 字典 & KVC 的使用

来源:互联网 发布:桥畔译谈CIP数据 编辑:程序博客网 时间:2024/05/18 12:43

字典分为不可变字典(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];


 /* 可变字典 */


1. 创建可变字典

        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"];


 /*model 类 */

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>

空着就可以, 如果没有定义这个属性, 就什么都不用写



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 网站安全证书有问题怎么办 公章圆圈摔坏了怎么办 高风险办税人员怎么办 公司因担保被起诉怎么办 借公司钱被起诉怎么办 qq群管理员满了怎么办 微信公众号搜索不到怎么办 微信名字改不了怎么办 微信号第一次限制登录怎么办 微信第一次限制登录怎么办 老板不回我微信怎么办 微信号换手机号了怎么办 电话被对方拉黑怎么办 微信被好友拉黑了怎么办 微信收藏删了怎么办 如果忘记支付宝登录手机号码怎么办 支付宝登录密码忘记了怎么办 支付宝账户名忘记了怎么办 搜索qq号搜不到怎么办 微信号手机号码换了怎么办 起诉以后没有被告人住址怎么办 农村老人走丢了怎么办 读在职博士工作单位不支持怎么办 两证合一后国税怎么办 杭州的发票丢了怎么办 小车登记证丢了怎么办 个体户地税逾期未申报怎么办 公司社保本丢了怎么办 社保红本子掉了怎么办 三证合一后逾期怎么办 个体执照没办国税地税怎么办 丰巢APP注册没工牌号怎么办 农业银行k宝证书过期怎么办 个体户网上申报税没定期怎么办 遇到不给开票的商户怎么办 奶茶店电脑下单怎么办 个体户营业执照注销怎么办清税业务 注册公司没有办公地点怎么办 变更莒业执照法人怎么办手续 欠了几十万贷款怎么办 杭州公司跨区迁址怎么办