zoukankan      html  css  js  c++  java
  • 可变数组的不可变操作

    -[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object' 有时会报这个错误

      首先,我们来分析一下这个报错的主要意思

    mutating method sent to immutable object

       说的是一个不可变的对象使用了可变的方法。

    这里面也许很多人会感到奇怪,我数组明明创建的是一个NSMutableArray,为什么突然说我不可变了呢?

    原因其实很简单,当一个NSMutavbleArray没有采用addobject来添加元素,而是直接赋值的时候,就会从一个可变数组编译成了不可变数组。

            举个例子:

    self.tableArr = [NSMutableArrayarrayWithCapacity:0];

    self.tableArr = [dicobjectForKey:@"result"];

            [self.tableArrremoveAllObjects];

    tableArr创建的是一个NSMutableArray可变数组,然后又直接赋值,

    这时候其实已经相当于一个NSArray不可变数组了,

    然后又走了一个removeAllObjects可变数组的移除元素方法。

    所以会导致直接崩溃,出现上面的报错。

    解决办法主要有两个:第一就是把self.tableArr = [dic objectForKey:@"result"]变成

    [self.tableArraddObject:[dicobjectForKey:@"result"]].

    第二个就是把[self.tableArr removeAllObjects]

    变成self.tableArr = [NSMutableArrayarrayWithCapacity:0].

    转载请注明出处http://blog.csdn.net/u013263917/article/details/22053039。谢谢

  • 相关阅读:
    jquery.md5
    LoginPasswordHelp
    RSA(非对称加密算法、公钥加密算法)
    Swiper 3.4.1
    layer web 弹窗
    操作系统
    查看命令帮助
    软件卸载
    重定向命令
    终端命令格式的组成
  • 原文地址:https://www.cnblogs.com/ritian/p/5818336.html
Copyright © 2011-2022 走看看