Ios [\uu\nsyi setObject:forKey:]:发送到实例的选择器无法识别

Ios [\uu\nsyi setObject:forKey:]:发送到实例的选择器无法识别,ios,nsdictionary,nsmutabledictionary,foundation,Ios,Nsdictionary,Nsmutabledictionary,Foundation,我正在尝试将“dateTime”添加到字典中,定义如下: Symptom Ranking: { 5111ef19253b4a9150000000 = 1; 5111f029253b4add4e000000 = 1; 5111f036253b4a123d000001 = 1; 5111f045253b4a404f000000 = 1; } NSLog(@"date selected: %@", [[self.datePicker date] description

我正在尝试将“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)

您的词典是不可变的-它是
NSDictionary
,而不是
NSMutableDictionary
。解决这个问题,它会很好地工作。

您需要使用一个
NSMutableDictionary
-堆栈跟踪显示您正在使用一个
\uu NSDictionaryI
,(
NSDictionary
)它是不可变的当我不小心声明了一个
copy
属性时,我遇到了一次这样的错误:

@property (nonatomic,copy) NSMutableDictionary* downloadHandlers;
当我在我的
init
中执行此操作时:

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

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

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

NSMutableDictionary* dict = [@{@"key": @"value"} mutableCopy];
这样您就可以使用

dict[@"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共享]addCommonProperties withProperties:logDict]]


其中,作为[[AnalyticsManager shared]AddCommonProperties WithProperties:logDict],此部分以[AnyHashable:AnyObject]格式返回。这解决了我的问题。

小心。。文本最终使用[NSDictionary alloc]initWithObjectsAndKeys,以零结尾……这正是我的问题。谢谢我遇到了完全相同的问题。谢谢