我正在尝试将“dateTime”添加到我的字典中,如下所示:
Symptom Ranking: {
5111ef19253b4a9150000000 = 1;
5111f029253b4add4e000000 = 1;
5111f036253b4a123d000001 = 1;
5111f045253b4a404f000000 = 1;
}
NSLog(@"date selected: %@", [[self.datePicker date] description])
[self.results setObject:[[self.datePicker date] description] forKey:@"dateTime"];
App崩溃了,我明白了:
Symptom Tracker[43134:c07] -[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance 0x7603990
2013-02-06 08:15:58.741 Symptom Tracker[43134:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance 0x7603990'
*** First throw call stack:
(0x171b012 0x1428e7e 0x17a64bd 0x170abbc 0x170a94e 0x521e 0x143c705 0x373920 0x3738b8 0x434671 0x434bcf 0x433d38 0x3a333f 0x3a3552 0x3813aa 0x372cf8 0x2652df9 0x2652ad0 0x1690bf5 0x1690962 0x16c1bb6 0x16c0f44 0x16c0e1b 0x26517e3 0x2651668 0x37065c 0x25dd 0x2505)
答案 0 :(得分:31)
您的词典是不可变的 - 它是NSDictionary
而不是NSMutableDictionary
。解决这个问题,它会正常工作。
答案 1 :(得分:25)
当我不小心宣布copy
属性时,我遇到了这个错误:
@property (nonatomic,copy) NSMutableDictionary* downloadHandlers;
当我在init
中执行此操作时:
self.downloadHandlers = [[NSMutableDictionary alloc] init];
我实际上有一本不可变的字典。我原以为在可变对象上调用copy
也会给我一个可变对象,但显然不是。无论如何,删除copy
关键字(我从来没有打算在那里)解决了问题。
答案 2 :(得分:7)
您需要使用NSMutableDictionary
- 堆栈跟踪显示您使用的是__NSDictionaryI
,(NSDictionary
),这是不可变的
答案 3 :(得分:7)
排名靠前的答案表示您需要使用NSMutableDictionary
代替NSDictionary
。如果您想使用文字,请使用mutableCopy
,如:
NSMutableDictionary* dict = [@{@"key": @"value"} mutableCopy];
这样您就可以使用
重新分配密钥了dict[@"key"] = @"new-value";
答案 4 :(得分:5)
当我们处理Web服务响应时,大多数情况下都会出现此问题,因为收到的数据是不可变的。当您尝试更改不可变数据时,应用程序肯定会崩溃。 我希望以下代码片段能够提供帮助。
NSMutableDictionary *headerData;
/*Every time you need to allocate memory to the corresponding MutableDictionary variable*/
headerData =[[NSMutableDictionary alloc ]initWithDictionary:response[@"Header"]];
答案 5 :(得分:4)
在我的情况下,我有一个快速的代码,以[AnyHashable:AnyObject]格式返回值,我不得不将其转换为NSMutableDictionary,
NSMutableDictionary *logDict = [[NSMutableDictionary alloc]initWithDictionary:[[AnalyticsManager shared]addCommonPropertiesWithProperties:logDict]];
[[AnalyticsManager共享] addCommonPropertiesWithProperties:logDict]此部分以[AnyHashable:AnyObject]格式返回。这解决了我的问题。