1

我知道这种怀疑可能是愚蠢的错误。我从 JSON 字符串中获取一个变量,它的状态为 1 或 0。如果我使用第一种方法(代码 1)它可以工作。但是,如果我使用第二种方法(Cord 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];
4

5 回答 5

9

我只会使用 NSString 的boolValue 方法。你可以像这样使用它:

NSDictionary *drivingAlertResponse = [jsonResponseString objectFromJSONString];
BOOL isEnabled = [[drivingAlertResponse valueForKey:@"alertStatus"] boolValue];
于 2012-06-18T16:13:55.687 回答
2

%i不是有效的格式说明符。要格式化整数,您应该使用%d. [drivingAlertResponse valueForKey:@"alertStatus"]然而,在你这样做的时候,当它仍然是一个对象(可能是一个 NSString 或一个 NSNumber)时,你正试图格式化为一个整数。对象的说明符是%@。但是,您可以简单地[[drivingAlertResponse valueForKey:@"alertStatus"] boolValue]完成它,因为 NSNumber 和 NSString 都有一个 boolValue 方法。

于 2012-06-18T16:10:22.990 回答
2
BOOL value = YES = TRUE = 1 and value = NO = FALSE = 0 

做这个:

BOOL isEnabled = [[NSString stringWithFormat:@"%@",[drivingAlertResponse valueForKey:@"alertStatus"]] intValue];
于 2012-06-18T16:13:34.440 回答
1

你为什么用%i?如果值为 0 或 1,则应使用 %d。

你可以试试:

BOOL isEnabled = [drivingAlertResponse valueForKey:@"alertStatus"] != 0
于 2012-06-18T16:12:43.627 回答
0

我会用

int returnBoolInt = [[drivingAlertResponse valueForKey:@"alertStatus"] intValue];

BOOL isEnabled = [[NSNumber numberWithInt:returnBoolStr] boolValue];
于 2012-06-18T16:17:07.790 回答