【问题标题】:Changing integer values in NSMutableArray, IOS Objective-C更改 NSMutableArray,IOS Objective-C 中的整数值
【发布时间】:2015-07-29 17:31:49
【问题描述】:

我创建了一个可以容纳一些整数的数组。但是,我似乎在试图更改数组中的一个值的代码行上遇到错误。我创建了一个数组,如下所示:

NSMutableArray *lockedArray;
lockedArray = [NSMutableArray arrayWithCapacity:50];

我在数组中添加了一些值:

[lockedArray addObject:@10];
[lockedArray addObject:@20];
[lockedArray addObject:@30];
[lockedArray addObject:@40];
[lockedArray addObject:@50];
[lockedArray addObject:@60];
[lockedArray addObject:@70];
[lockedArray addObject:@80];

现在我想更改其中一个值。例如,如果我想更改第 6 个值,那么我使用以下代码...

[lockedArray replaceObjectAtIndex:5 withObject:@1];

在 Xcode 中我没有收到任何警告,一切看起来都很好。当我运行代码并开始替换对象时,它会崩溃并给我以下错误...

由于未捕获的异常而终止应用 'NSInternalInconsistencyException',原因:'-[__NSCFArray replaceObjectAtIndex:withObject:]: 发送到不可变的变异方法 对象'

【问题讨论】:

  • 问题在于方式,您正在创建阵列。你的数组是不可变的。数组可能来自字典、webService 或类似的东西。在你的代码的某些部分,你有:lockedArray = somethingThanIsAndArray;改为:lockedArray = [[NSMutableArray alloc] initWithArray:somethingThanIsAndArray];
  • 如何创建分配给lockedArray 指针的实际数组?你有没有改变过lockedArray指向的东西?
  • @PhillipMills 我在编辑中添加了代码
  • 我认为例外情况很明显。您的lockedArray 不是mutableArray。 (发布你所有的代码),或者做一个 NSLog(@"%@",[[lockedArray class] description]);
  • 它必须与在填充数组和进行替换之间发生的事情有关。如果我只是将您的代码作为一系列语句运行(声明、分配、填充、替换),它会按预期工作而没有错误。

标签: ios objective-c iphone arrays xcode


【解决方案1】:

我们不知道你到底在做什么,但在调用 replaceObjectAtIndex 时,lockedArray 不是可变数组而是不可变数组。

由于无法将数组从可变更改为不可变,因此您很可能在添加其他元素后为lockedArray 分配了一个不同的(不可变的)数组。

【讨论】:

    【解决方案2】:

    你有没有像这样分配和初始化你的数组,

    lockedArray = [[NSMutableArray alloc]init];
    

    试试吧,希望对你有用

    【讨论】:

    • 这可能解决不了问题,可能在赋值中,他将指针“lockedArray”指向了其他数组。
    【解决方案3】:

    确保检查您没有将lockedArray 指向一个非可变数组,或者您没有这样启动它。使用 Xcode 的 find 函数进行搜索

    "lockedArray = [NSArray"

    "lockedArray="

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多