NSDictionary 字典 & KVC 的使用

字典分为不可变字典(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值