3

请帮我解决我的麻烦:我无法比较价值来知道成功的结果是否成功。我将 json-object 作为 NSDictionaty 获取:

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

之后我得到了键的价值:代码

    [returnDictionary objectForKey:@"code"];

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

4

5 回答 5

5

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

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

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

或者

[[returnDictionary objectForKey:@"code"] intValue] == 1
于 2013-05-23T16:55:47.157 回答
1

您可以使用

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

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

希望能帮助到你!

于 2013-05-23T16:53:53.230 回答
1

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

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

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

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

于 2013-05-23T16:55:16.660 回答
0

id在 Objective-C 中是一种“作弊”,尽管它被官方“祝福”。通常,在方法返回的地方,id您可以直接使用该值来调用返回类型的方法,而无需先转换为适当的类型——编译器知道抑制“找不到该方法名称”类型的警告/错误当通话处于id.

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

于 2013-05-23T17:01:47.027 回答
0

放一个断点并打印出类名...

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

这将为您提供课程,例如_NSCFString字符串等...

于 2013-05-23T16:52:34.120 回答