我有一个可变的字典对象,它是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'
答案 0 :(得分:1)
这似乎是您使用不可变的值初始化属性(这就是__NSDictionaryI
告诉您的内容)。也许像这样:
obj = @{};
或者也许您正在从序列化程序中读取它。这些通常创建不可变的集合(尽管根据您的序列化程序,有一些创建可变集合的选项)。仅定义指向对象的指针的类型并不能使其变为该类型。该对象本身必须创建为可变字典。
在某个时候应该有一行代码,例如:
obj = [NSMutableDictionary new];
或
obj = [someImmutableDictionary mutableCopy];