使用NSString在IOS中的IF语句问题

时间:2013-06-20 01:16:52

标签: ios objective-c

我的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工作。我是否需要将NSString更改为int

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:3)

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

NSString *active = @"1";

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

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

答案 2 :(得分:1)

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

尝试使用:

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

并查看“if ([activeNumber boolValue] == YES)”是否适合您。