我有来自服务器的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;
答案 0 :(得分:4)
更改此属性FROM -
@property BOOL *featured;
以强>
@property (assign) BOOL featured;
BOOL是原始数据类型,不能直接作为对象创建。但是,如果需要将其用作对象,请将其包含在基础类(如NSNumber
或NSString
)中。像这样 -
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];
)