请帮助我解决问题: 我无法与价值进行比较,无论是否知道成功的结果。 我将json-object作为NSDictionaty获取:
NSDictionary *returnDictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil];
之后我获得了key:code
的价值 [returnDictionary objectForKey:@"code"];
如果返回值等于1,那么确定,但问题是我不知道键的类型值"代码"。我试图比较id,NSString,NSNumber,但都失败了。我应该比较什么类型的对象?
答案 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));
或一种或两种其他方式记录对象的类名。