无法处理@“1”

时间:2013-10-24 13:26:12

标签: ios objective-c json

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

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

我的第一次尝试:

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;

5 个答案:

答案 0 :(得分:4)

更改此属性FROM -

@property BOOL *featured;

@property (assign) BOOL featured;

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

NSNumber *featuredObject = [NSNumber numberWithBool:featured];

并取回这样的价值 -

BOOL featured = [featuredObject boolValue];

对bool vs BOOL感到困惑?阅读here

答案 1 :(得分:3)

BOOL不是类,是原始类型

BOOL a = [bolean boolValue];

不是

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

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

po [bolean class]

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

答案 2 :(得分: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]]

它大大简化并且工作正常

答案 3 :(得分: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];
    }

答案 4 :(得分:0)

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

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

或者您的代码可以写成:

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

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

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