2

我有来自服务器的 JSON 响应,并且有格式为 1=true、0=false 的 bool 变量。

在我的代码中,我这样做:

我的第一次尝试:

NSString *bolean=[dict objectForKey:@"featured"];
    if ([bolean isEqualToString:@"1"]) // here application fails...
    {
        BOOL *a=[bolean boolValue];
        [newPasaka setFeatured:a];
    }
    else
    {
        BOOL *a=[bolean boolValue];
        [newPasaka setFeatured:a];
    }

我的第二次尝试:

这里它认为 1 = NO, 0 = NULL

NSString *bolean=[dict objectForKey:@"featured"];
    if ([bolean boolValue]) //if true (1)
    {
        BOOL *a=[bolean boolValue];
        [newPasaka setFeatured:a];
    }
    else //if false (0)
    {
        BOOL *a=[bolean boolValue];
        [newPasaka setFeatured:a];
    }

如何解决这个问题?

而且我的班级也处理了这个疯狂的事情。当我将精选集设置为时YES-它设置了NO。当我设置NO- 它设置null.

这是我的课:

*.h

@property BOOL *featured;

*.m

@synthesize featured;
4

5 回答 5

4

将此属性更改为 -

@property BOOL *featured;

@property (assign) BOOL featured;

BOOL 是原始数据类型,不能直接创建为对象。但是,如果您需要将其用作对象,请将其包装在基础类中,例如NSNumberor NSString。像这样 -

NSNumber *featuredObject = [NSNumber numberWithBool:featured];

并像这样取回价值-

BOOL featured = [featuredObject boolValue];

对 bool 和 BOOL 感到困惑?在这里阅读。

于 2013-10-24T13:29:51.707 回答
3

BOOL 不是类,是原始类型

BOOL a = [bolean boolValue];

不是

BOOL *a = [bolean boolValue]; // this is wront

无论如何,对于 JSON,该值应该表示为数字,而不是字符串,除非您正在处理的 API 强制该值是字符串。在 objectForKey 之后放置一个断点并在控制台中打印 'bolean' 对象的类:

po [bolean class]

所以你会确定你正在处理的对象类型,然后如果是数字(应该是),只需使用 [bolean boolValue]

于 2013-10-24T13:35:54.620 回答
0

BOOL 是原始类型,因此您无需使用指针。

更改此属性

@property BOOL *featured;

@property BOOL featured;

然后你需要替换这段代码:

NSString *bolean=[dict objectForKey:@"featured"];
    if ([bolean isEqualToString:@"1"]) // here application fails...
    {
        BOOL *a=[bolean boolValue];
        [newPasaka setFeatured:a];
    }
    else
    {
        BOOL *a=[bolean boolValue];
        [newPasaka setFeatured:a];
    }

有了这个:

NSString *bolean=[dict objectForKey:@"featured"];
[newPasaka setFeatured:[boolean boolValue]]

它大大简化并且工作正常

于 2013-10-24T13:45:16.783 回答
0

您可以做的另一种方法是在下面进行修改:-

@property (assign) Bool featured;
NSString *bolean=[dict objectForKey:@"featured"];
Bool yourBoolValue=[bolean boolValue];
    if (yourBoolValue==1]) // here if (true)
    {
        Bool a=yourBoolValue;
        [newPasaka setFeatured:a];
    }
    else//if (false)
    {
        Bool a=yourBoolValue;
        [newPasaka setFeatured:a];
    }
于 2013-10-24T13:45:59.393 回答
0

假设这dict是反序列化的 JSON 对象,并且布尔值表示为 JSON 数字(0 或 1),那么您将获得一个布尔值,如下所示:

BOOL isFeatured = [dict[@"featured"] boolValue];

或者你的代码可以写成:

[newPasaka setFeatured:[dict[@"featured"] boolValue]];

或利用 Ashok 更正的财产声明:

newPaska.featured = [dict[@"featured"] boolValue];

;)

于 2013-10-24T13:48:07.117 回答