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

时间:2018-11-23 18:00:41

标签: objective-c nsmutablearray

我有一个可变的字典对象,它是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'

1 个答案:

答案 0 :(得分:1)

这似乎是您使用不可变的值初始化属性(这就是__NSDictionaryI告诉您的内容)。也许像这样:

obj = @{};

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

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

obj = [NSMutableDictionary new];

obj = [someImmutableDictionary mutableCopy];