:无法识别的select器发送到实例

我正在试图添加“date时间”我的字典定义如下:

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"]; 

应用程序崩溃,我得到这个:

 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) 

你的字典是不可变的 – 这是一个NSDictionary而不是一个NSMutableDictionary 。 解决这个问题,它会正常工作。

当我意外地声明一个像这样的copy属性时,我遇到了这个错误:

 @property (nonatomic,copy) NSMutableDictionary* downloadHandlers; 

当我在我的init这样做的时候:

 self.downloadHandlers = [[NSMutableDictionary alloc] init]; 

我其实有一个不可改变的字典。 我本来会期望调用一个可变对象的copy也会给我一个可变的对象,但显然不是。 无论如何,删除到copy关键字(我从来没有打算在那里摆在首位)解决了这个问题。

您需要使用NSMutableDictionary – 堆栈跟踪显示您正在使用__NSDictionaryI ,( NSDictionary )是不可变的

作为排名第一的答案说你需要使用NSMutableDictionary而不是NSDictionary。 如果你想使用文字,使用mutableCopy如:

NSMutableDictionary * dict = [@ {@“key”:@“value”} mutableCopy];

这样你就可以使用重新分配键

字典[@“key”] = @“new-value”;

当我们处理Web服务响应时,大部分时间都会发生这个问题,因为接收到的数据是不可变的。 当你试图改变不可变的数据时,应用程序肯定会崩溃。 我希望下面的代码片段将有所帮助。

 NSMutableDictionary *headerData; /*Every time you need to allocate memory to the corresponding MutableDictionary variable*/ headerData =[[NSMutableDictionary alloc ]initWithDictionary:response[@"Header"]]; 

在我的情况下,我有一个swift代码,它返回[AnyHashable:AnyObject]格式的值,我不得不将其转换为NSMutableDictionary,

NSMutableDictionary *logDict = [[NSMutableDictionary alloc]initWithDictionary:[[AnalyticsManager shared]addCommonPropertiesWithProperties:logDict]];

作为[[AnalyticsManager共享] addCommonPropertiesWithProperties:logDict],此部分以[AnyHashable:AnyObject]格式返回。 这解决了我的问题。