iOS:寻找 NSDictionary 值时出现错误:[__NSCFNumber isEqualToString:]: unrecognized selector sent to instanc

Posted

技术标签:

【中文标题】iOS:寻找 NSDictionary 值时出现错误:[__NSCFNumber isEqualToString:]: unrecognized selector sent to instanc【英文标题】:iOS: Looking for NSDictionary value I get error: [__NSCFNumber isEqualToString:]: unrecognized selector sent to instanc 【发布时间】:2017-07-17 18:56:12 【问题描述】:

我得到了带有字典子数组的 Json 响应,我正在寻找其中一个子数组中的特定值。这是我关心的子数组:

<__NSArrayM 0x600000047680>(

    value = "VeryImportanValue";
,

    value = "someValue";
,

    value = 0912131235235234;

)

我正在查找值为“VeryImportanValue”的字典。但是你可以看到你的值是数字的,我检查一下:

if ([[dict objectForKey:@"value"]isEqualToString:@"VeryImportanValue"])

我收到此错误:

 -[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance

但是切换 if 语句来修复上面的错误:

 if ([[[dict objectForKey:@"value"] stringValue] isEqualToString:@"VeryImportanValue"])

我收到此错误:

-[__NSCFString stringValue]: unrecognized selector sent to instance 

无论是字符串还是数值,如何检查字典的值而不会出现任何此类错误?

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

您可以创建一个将未知对象转换为字符串的方法:

- (NSString *)stringForStringOrNumber:(id)object

    NSString *result = nil;
    if ([object isKindOfClass:[NSString class]]) 
        result = object;
     else if ([object isKindOfClass:[NSNumber class]]) 
        result = [object stringValue];
     else 
        result = @"I can't guess";
    
    return result;

【讨论】:

你可以....但是把所有东西都变成一个字符串可能很慢而且可能不精确。【参考方案2】:

在你做isEqualToString之前,你应该先检查你的字典的值类型。

  if(dict[@"value"]isKindOfClass==[NSString class]) //value is string 

【讨论】:

或者可以编译的东西。 :)

以上是关于iOS:寻找 NSDictionary 值时出现错误:[__NSCFNumber isEqualToString:]: unrecognized selector sent to instanc的主要内容,如果未能解决你的问题,请参考以下文章

无法创建 Plist 文件。 iOS+NSDictionary+JSON

无法从 NSDictionary 获取值是 ios

iOS NSDictionary 保存到 NSUserDefaults 不保存值

Ios NSDictionary 数组 - 分组值和键

检查 NSDictionary 中的键 - 不使用布尔 NSNumber 作为值 @iOS8

发送到实例的 iOS 无法识别的选择器 - 将 NSDictionary 添加到 NSMutableArray