所以我现在已经坚持了一段时间,我已经浏览了Stackoverflow上的很多帖子,但我似乎还无法弄清楚如何解决这个问题。在我看来," dict"应该转换为字符串,所以我在很多方面尝试过,例如使用NSString *myString = [NSNumber stringValue];
,[NSString stringWithFormat:@"%d", dict[@"id"]];
和其他几个。这是代码:
for (NSDictionary *dict in self.params) {
NSString *value = dict[@"id"];
if (value) {
[parameters appendFormat:@"&ids[]=%@", value];
}
}
我得到的错误就在这一行:NSString *value = dict[@"id"];
控制台上的输出显示:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber objectForKeyedSubscript:]: unrecognized selector sent to instance 0xb00000000000a313'
我认为问题在于它似乎没有正确转换为字符串。该行显示dict为NSCFNumber(长)2609。如何将其转换为字符串?
答案 0 :(得分:2)
您的self.params
数据必须包含NSNumber。一旦你到达该号码并尝试获取密钥,你就会崩溃。
在尝试从中获取键值之前,您需要清理数据或编写检查数组中每个对象的类的代码。
您可以像这样修改循环:
for (NSDictionary *dict in self.params)
{
if (![dict isKindOfClass: [NSDictionary class])
{
NSLog("Non-Dictionary object %@ found. Skipping.", dict)
continue;
}
NSString *value = dict[@"id"];
if (value) {
[parameters appendFormat:@"&ids[]=%@", value];
}
}
答案 1 :(得分:1)
//试试这样它会起作用
for (NSDictionary *dict in self.params) {
if([dict isKindOfClass:[NSDictionary class]]) {
NSString *value = [NSString stringWithFormat:@"%@",dict[@"id"]];
if (value) {
[parameters appendFormat:@"&ids[]=%@", value];
}
}
}
答案 2 :(得分:0)
[self.params enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[NSDictionary class]]) {
// Do whatever you want
}
}];