2

我的 if 语句不起作用。active返回 1 但在IF statement

JSONDecoder *jsonKitDecoder = [JSONDecoder decoder];
NSDictionary *dict  = [jsonKitDecoder objectWithData:jsonData]; 

NSString *userid = [dict valueForKeyPath:@"users.user_id"];
NSString *active = [dict valueForKeyPath:@"users.active"];

NSLog(@"%@",userid);    // 2013-06-20 03:03:21.864 test[81783:c07] (74)
NSLog(@"%@",active);    // 2013-06-20 03:03:21.864 test[81783:c07] (1)

if ([active isEqualToString:@"1"]){
    // Do something
}

我似乎无法让它IF工作。我需要将 更改NSStringint吗?

4

3 回答 3

6

对于初学者,使用现代风格从字典中检索值,而不是valueForKeyPath:.

NSDictionary* users = dict[@"users"];
id active = users[@"active"];

一旦你使用了现代风格,我的猜测是活动值实际上是一个代表布尔值的 NSNumber。因此,您的 if 块将显示为:

if([active isKindOfClass:NSNumber] && [active boolValue]) {
    //active is an NSNumber, and the user is active
}
于 2013-06-20T01:22:14.813 回答
3

if 语句的语法很好。如上所述,我会尝试从字典中检索值的替代方法。

NSString *active = @"1";

if ([active isEqualToString:@"1"])
{
    // Do something
    NSLog(@"It works!");
}

于 2013-06-20T01:27:46.993 回答
1

users.active从 NSDictionary 化的 JSON 流返回的“”对象很可能是“ BOOL”或“ NSInteger”作为 NSNumber 对象的有效负载,它不是NSString 对象。

尝试使用:

NSNumber * activeNumber = [dict valueForKeyPath: @"users.active"];

看看“ if ([activeNumber boolValue] == YES)”是否更适合你。

于 2013-06-20T01:18:45.903 回答