boolValue没有将NSString转换为BOOL

时间:2012-06-18 16:06:27

标签: objective-c ios json boolean

我知道这个疑问可能是个愚蠢的错误。我从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];

5 个答案:

答案 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];