我的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
?
答案 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)
”是否适合您。