异常:"发送到不可变对象的变异方法"这实际上是一个可变数组

时间:2014-06-22 21:02:12

标签: objective-c xcode

我正在尝试将值更改为可变数组的特定键:

NSMutableArray* reversed = [NSMutableArray arrayWithArray:regions];

[reversed setValue:@"current" forKey:@"region"];

但是这导致了一个未被捕获的例外:

  

*由于未捕获的异常而终止应用   ' NSInternalInconsistencyException',原因:' - [__ NSCFDictionary   setObject:forKey:]:发送到不可变对象的变异方法'   * 首先抛出调用堆栈:

为什么告诉我我的NSMutableArray是一个不可变对象?

2 个答案:

答案 0 :(得分:2)

setValue:forKey:documented to do the following

setValue:forKey:
     

使用指定的值和键在每个数组的项上调用setValue:forKey:

强调我的。你的NSMutableArray是可变的,但其中一个项目是不可变的。

答案 1 :(得分:1)

您是否在该错误消息中看到任何提及NSMutableArray的内容?不。它提到了__NSCFDictionary,这是一个NSDictionary运行时类。

您对setValue:forKey:的呼叫将被转发到此阵列中的所有对象。这些对象中至少有一个是不可变的NSDictionary,它会抛出此异常。