• 关于可变数组/字典 不小心转换成 不可变数组/字典 实际应用举例(很隐蔽)


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

    例如:

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

                        }

             }

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

  • 相关阅读:
    C++ IO: File Read Write
    C++ 作用域与存储类型及预编译指令及文件结构
    Power Threading Library
    C++ 类和对象,继承,派生
    面试题:李白喝酒的问题
    计算机科学与技术 转
    [Buzz Today]2012.02.24
    [Buzz.Today]2013.03.28
    [Buzz.Today]2013.03.14
    [Tips] 网间流传的Document.ready实现
  • 原文地址:https://www.cnblogs.com/richard-youth/p/9120651.html
Copyright © 2020-2023  润新知