Ios [\uu\nsyi setObject:forKey:]:发送到实例的选择器无法识别
我正在尝试将“dateTime”添加到字典中,定义如下: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
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,以零结尾……这正是我的问题。谢谢我遇到了完全相同的问题。谢谢