【发布时间】: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