zoukankan      html  css  js  c++  java
  • 关于可变数组/字典 不小心转换成 不可变数组/字典 实际应用举例(很隐蔽)

    不可变数组/字典 是不能修改里面的值的,这点大家都很清楚,但是实际中会出现一种很隐蔽的问题:可变的悄悄的转化成了不可变的,有时候不注意就会崩溃,现在记录下来,供项目今后新人参考。

    例如:

    1、属性定义的是NSMutableArray

    @property (nonatomic, strong) NSMutableArray *layoutModelArray;//属性定义

       进行赋值操作:

      self.layoutModelArray = [[dict objectForKey:@"data"] objectForKey:@"cards"];

       进行替换操作:

      [self.layoutModelArray replaceObjectAtIndex:i withObject:layoutDic];

      崩溃:原因是不可变数组不能修改

      [__NSArrayI replaceObjectAtIndex:withObject:]: unrecognized selector sent to instance 0x60400066cc40

     相应的策略如下即可:

     self.layoutModelArray = [[[dict objectForKey:@"data"] objectForKey:@"cards"] mutableCopy];

     或者是:

     NSMutableArray *yooweiArry=[NSMutableArray arrayWithArray:[[dict objectForKey:@"data"] objectForKey:@"cards"]];

    2、类似的例子:

    NSArray *items = layoutDic[@"items"];//拿到布局里面的组件

    NSDictionary *itemsFirst = items.firstObject;//其实我们定义的就一个元素

    NSMutableDictionary *tempItemsFirst=[itemsFirst mutableCopy]; //注意

    if (temListIndic&&temListIndic.count>0) {

                        if ([tempItemsFirst objectForKey:@"style"]) {

                            NSMutableDictionary*testOne=[[tempItemsFirst objectForKey:@"style"] mutableCopy]; //注意

                            if ([testOne objectForKey:@"height"]) {//其实可以不用判断

                                [testOne setValue:@"60" forKey:@"height"];

                            }

                            [tempItemsFirst setValue:testOne forKey:@"style"];

                        }

             }

    所以这种很隐蔽的地方,大家以后一定要注意了。

  • 相关阅读:
    钢镚儿冲刺一周期第七天
    代码大全(第二版)阅读笔记01
    组队开发——地铁路线查询
    学习进度——第五周
    学习进度——第四周
    返回一个整数数组中最大子数组的和(文件)
    学习进度——第三周
    返回一个整数数组中最大子数组的和
    自我介绍
    学习进度——第二周
  • 原文地址:https://www.cnblogs.com/richard-youth/p/9120651.html
Copyright © 2011-2022 走看看