将NSDictionary值(id?)转换为NSString或NSNumber以进行比较

时间:2013-05-23 16:44:54

标签: objective-c json compare nsdictionary

请帮助我解决问题: 我无法与价值进行比较,无论是否知道成功的结果。 我将json-object作为NSDictionaty获取:

    NSDictionary *returnDictionary = [NSJSONSerialization JSONObjectWithData:responseObject                                                                                                                                       options:0 error:nil];

之后我获得了key:code

的价值
    [returnDictionary objectForKey:@"code"];

如果返回值等于1,那么确定,但问题是我不知道键的类型值"代码"。我试图比较id,NSString,NSNumber,但都失败了。我应该比较什么类型的对象?

5 个答案:

答案 0 :(得分:4)

您是否使用比较运算符(==)来比较对象?

如果是这样,您没有比较对象的值,而是比较它们的内存地址 如果[returnDictionary objectForKey:@"code"]返回的对象属于NSString类型,则应使用NSString's isEqualToString: 如果它返回NSNumber实例,您可以将该对象的intValue与1进行比较。

[[returnDictionary objectForKey:@"code"] isEqualToString:@"1"]  

[[returnDictionary objectForKey:@"code"] intValue] == 1

答案 1 :(得分:1)

您可以使用

[[returnDictionary objectForKey:@"code"] isKindOfClass:[NSString class]]

检查从字典中提取的对象的类。

希望它有所帮助!

答案 2 :(得分:1)

如果您希望输出为整数,则可以调用intValue

[[returnDictionary objectForKey:@"code"] intValue] == 1

此外,您可以通过+ class;方法记录返回对象的类型。

NSLog(@"%@", [[returnDictionary objectForKey:@"code"] class]);

答案 3 :(得分:0)

输入断点并打印出类名...

输入调试器:po [[returnDictionary objectForKey:@"code"]className]

将为您提供课程,类似_NSCFString的字符串等...

答案 4 :(得分:0)

id在Objective-C中是一种“欺骗”,尽管它是正式的“祝福”。通常,在方法返回id的情况下,您可以直接使用该值来调用返回类型的方法,而不必首先强制转换为适当的类型 - 编译器知道抑制“无法找到该方法名称“当呼叫在id时输入警告/错误。

当然,如果你不知道对象的类,你就不知道调用哪个方法。正如Pablo建议您可以使用isKindOfClass进行测试,如果您有疑问。或者,您可以使用NSLog(@"The class is %s", object_getClassName(someId));或一种或两种其他方式记录对象的类名。