【问题标题】:exception: "mutating method sent to immutable object" which is actually a mutable array例外:“发送到不可变对象的变异方法”实际上是一个可变数组
【发布时间】:2014-06-22 21:02:11
【问题描述】:

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

NSMutableArray* reversed = [NSMutableArray arrayWithArray:regions];

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

但这会导致未捕获的异常:

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

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

【问题讨论】:

    标签: objective-c xcode


    【解决方案1】:

    setValue:forKey:documented to do the following

    setValue:forKey:
    

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

    强调我的。您的 NSMutableArray 是可变的,但其中包含的一项是不可变的。

    【讨论】:

      【解决方案2】:

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

      您对setValue:forKey: 的调用正在转发到此数组中的所有对象。这些对象中至少有一个是不可变的NSDictionary,它会引发此异常。

      【讨论】:

        猜你喜欢
        • 2011-08-13
        • 2016-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多