18

我正在尝试将“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"];

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

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)
4

6 回答 6

35

你的字典是不可变的——它是一个NSDictionary而不是一个NSMutableDictionary. 修复它,它会正常工作。

于 2013-02-06T14:25:12.660 回答
28

当我不小心声明了copy这样一个属性时,我遇到了这个错误:

@property (nonatomic,copy) NSMutableDictionary* downloadHandlers;

当我在我的init

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

我实际上有一个不可变的字典。我原以为调用copy可变对象也会给我一个可变对象,但显然不是。无论如何,删除copy关键字(我一开始就不想在那里)解决了这个问题。

于 2014-08-12T21:38:57.670 回答
9

正如排名最高的答案所说,您需要使用NSMutableDictionary而不是NSDictionary. 如果您想使用文字,请使用mutableCopy如下:

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

这样您就可以使用重新分配密钥

dict[@"key"] = @"new-value";
于 2014-09-05T07:53:09.090 回答
7

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

于 2013-02-06T14:25:29.893 回答
7

当我们处理 Web 服务响应时,大多数时候都会出现此问题,因为接收到的数据是不可变的。当您尝试更改不可变数据时,应用程序肯定会崩溃。我希望下面的代码片段会有所帮助。

NSMutableDictionary  *headerData;

/*Every time you need to allocate memory to the corresponding MutableDictionary variable*/

headerData =[[NSMutableDictionary alloc ]initWithDictionary:response[@"Header"]];
于 2017-04-15T13:13:50.313 回答
4

在我的情况下,我有一个以 [AnyHashable:AnyObject] 格式返回值的快速代码,我必须将其转换为 NSMutableDictionary,

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

其中 [[AnalyticsManager shared]addCommonPropertiesWithProperties:logDict] 这部分以 [AnyHashable:AnyObject] 格式返回。这解决了我的问题。

于 2017-12-15T07:21:00.300 回答