-[__NSCFNumber objectForKeyedSubscript:]: 无法识别的选择器发送到实例
-[__NSCFNumber objectForKeyedSubscript:]: unrecognized selector sent to instance
所以我已经坚持了一段时间了,我已经浏览了 Whosebug 上的许多帖子,但我似乎仍然无法弄清楚如何解决这个问题。在我看来,"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 (long)2609。如何将其转换为字符串?
您的 self.params
数据必须包含一个 NSNumber。一旦你找到号码并尝试获取密钥,你就会崩溃。
您需要清理数据,或者编写代码来检查数组中每个对象的 class,然后再尝试从中获取键值。
您可以像这样修改循环:
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];
}
}
// 像这样尝试它会起作用
for (NSDictionary *dict in self.params) {
if([dict isKindOfClass:[NSDictionary class]]) {
NSString *value = [NSString stringWithFormat:@"%@",dict[@"id"]];
if (value) {
[parameters appendFormat:@"&ids[]=%@", value];
}
}
}
[self.params enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[NSDictionary class]]) {
// Do whatever you want
}
}];
所以我已经坚持了一段时间了,我已经浏览了 Whosebug 上的许多帖子,但我似乎仍然无法弄清楚如何解决这个问题。在我看来,"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 (long)2609。如何将其转换为字符串?
您的 self.params
数据必须包含一个 NSNumber。一旦你找到号码并尝试获取密钥,你就会崩溃。
您需要清理数据,或者编写代码来检查数组中每个对象的 class,然后再尝试从中获取键值。
您可以像这样修改循环:
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];
}
}
// 像这样尝试它会起作用
for (NSDictionary *dict in self.params) {
if([dict isKindOfClass:[NSDictionary class]]) {
NSString *value = [NSString stringWithFormat:@"%@",dict[@"id"]];
if (value) {
[parameters appendFormat:@"&ids[]=%@", value];
}
}
}
[self.params enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[NSDictionary class]]) {
// Do whatever you want
}
}];