不可变字典和可变字典的误区

 

突然想着set一个值进去,为了方便点,在同一个对象中拿值,结果竟然崩溃,百思不得其解,后来通过property的方式传值过去。第二天早上仔细研究了下 ,原先的流程是一开始在didload里面创建了可变字典 

- (void)viewDidLoad {

    [super viewDidLoad];

    [_mTableView setBackgroundColor:[UIColor clearColor]];

    [self setTitle:@"添加银行卡"];

    _mTableView.tableFooterView=_footView;

    _footView.backgroundColor=CLEARCOLOR;

    dicCardBin=[[NSMutableDictionary alloc] init];

    // Do any additional setup after loading the view.

   }

请求数据的时候      dicCardBin =(NSMutableDictionary *)responseData;

  [dicCardBin setObject:[cellTwo.mTextField.text delectSpace] forKey:@"bankCard"]; //此时崩溃

问了楠哥,楠哥很严肃反问,不可变字典转可变字典是这样转的吗?当时就感觉可能就是这个地方错了,虽然这么赋值dicCardBin是可以接到服务器返回来的值,可以作为后面的处理,但是其实还是属于不可变字典,尽管定义和构造看起来是不可变的,原因正是出在这里,因为本人觉得不可变字典虽然setValue不可用,但是不至于setObject也不可用吧! 经过楠哥指点,加上我当时顿悟,立马回去改写,运行了下,完全没有问题,一次过!

改写是这样的,didload立马方法注释掉//dicCardBin=[[NSMutableDictionary alloc] init];

在请求的时候

  if (responseData) {

                            //得到用户输入卡的类型

//                            dicCardBin =(NSMutableDictionary *)responseData;

                               dicCardBin=[[NSMutableDictionary alloc] initWithDictionary:responseData];

                            [dicCardBin setObject:[cellTwo.mTextField.text delectSpace] forKey:@"bankCard"];

}

这么处理就可以了。看起来很简单,不遇到问题和联系实际场景,根本感觉不到。

最早写这个的时候,当时就是怕写在请求里面会构造多次,还要做非空判断,太麻烦,倒不如直接didload里面早点构造了算了,结果三年后,自己的坑自己去踩。最基础的其实还是最重要的。那些你理解不了的基础还是要从项目中实践。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值