我知道这个疑问可能是个愚蠢的错误。我从JSON字符串获取变量,它将具有状态1或0.如果我使用第一种方法(代码1)它可以工作。但是,如果我做第二种方法(线2),我总是没有。我不知道我做错了什么。如果问题太愚蠢,请原谅我。
第1条:
NSDictionary *drivingAlertResponse = [jsonResponseString objectFromJSONString];
BOOL isEnabled;
if ([[drivingAlertResponse valueForKey:@"alertStatus"] intValue] > 0) {
isEnabled = TRUE;
}else{
isEnabled = FALSE;
}
第2条:
BOOL isEnabled = [[[NSString stringWithFormat:@"%i",[drivingAlertResponse valueForKey:@"alertStatus"]] isEqualToString:@"1"]? @"TRUE": @"FALSE" boolValue];
答案 0 :(得分:9)
我只会使用NSString的boolValue method。您可以像这样使用它:
NSDictionary *drivingAlertResponse = [jsonResponseString objectFromJSONString];
BOOL isEnabled = [[drivingAlertResponse valueForKey:@"alertStatus"] boolValue];
答案 1 :(得分:2)
%i
不是valid format specifier。要格式化整数,您应该使用%d
。但是,在您这样做的时候,当它仍然是一个对象(可能是NSString或NSNumber)时,您试图将[drivingAlertResponse valueForKey:@"alertStatus"]
格式化为整数。 对象的说明符是%@
。但是,您可以简单地执行[[drivingAlertResponse valueForKey:@"alertStatus"] boolValue]
并完成它,因为NSNumber和NSString都有boolValue方法。
答案 2 :(得分:2)
BOOL value = YES = TRUE = 1 and value = NO = FALSE = 0
这样做:
BOOL isEnabled = [[NSString stringWithFormat:@"%@",[drivingAlertResponse valueForKey:@"alertStatus"]] intValue];
答案 3 :(得分:1)
你为什么使用%i?如果值为0或1,则应使用%d。
您可以尝试:
BOOL isEnabled = [drivingAlertResponse valueForKey:@"alertStatus"] != 0
答案 4 :(得分:0)
我会用
int returnBoolInt = [[drivingAlertResponse valueForKey:@"alertStatus"] intValue];
BOOL isEnabled = [[NSNumber numberWithInt:returnBoolStr] boolValue];