为什么我不能在NSMutable字典中设置对象



我有一个可变字典对象,它是Model类的一部分,声明如下。

@interface Obj : NSObject
@property  NSMutableDictionary *obj;

obj的值如下所示。

{0=(0,"5.00","5.59","14.00","14.59","22.00","22.59");1=(1."5.00","5.59","14.00","14.59","22.00","22.59");2=(2."5.00","5.59","14.00","14.59","22.00","22.59");3=(3."5.00","5.59","14.00","14.59","22.00","22.59");4=(4."5.00","5.59","14.00","14.59","22.00","22.59");5=(5."5.00","5.59","14.00","14.59","22.00","22.59");6=(6."5.00","5.59","14.00","14.59","22.00","22.59");}

当我尝试设置/更新特定键的值时,我的应用程序总是与以下代码行崩溃。

[Obj.obj setValue:array3 forKey:string];

其中array3具有以下值。

(4.5.6.14,15,22,23)

我已尝试将行更改为

[Obj.obj setObject:array3 forKey:string];

但我总是会遇到下面的错误。

由于未捕获的异常"NSInvalidArgumentException"而终止应用程序,原因:"-[__NSDictionaryI setObject:forKey:]:无法识别的选择器发送到实例0x6040001b3160'

这看起来像是在用一个不可变的值初始化属性(这就是__NSDictionaryI告诉你的(。也许类似于:

obj = @{};

或者您可能正在从序列化程序中读取它。它们通常会创建不可变的集合(尽管根据序列化程序的不同,也有创建可变集合的选项(。仅仅定义指向对象的指针的类型并不能使其成为那种类型;对象本身必须创建为可变字典。

在某个时刻,应该有一行代码,如:

obj = [NSMutableDictionary new];

obj = [someImmutableDictionary mutableCopy];

最新更新