假设这是我想要分配给BOOL变量的JSON中的值:
"retweeted": false
以下是我解析JSON数据的方法:
NSError *error;
NSArray *timeline = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&error];
现在,我将bool属性定义为:
BOOL *retweeted;
我班上。当我在解析JSON的时候这样做:
tweet.retweeted = [[[timeline objectAtIndex:i] objectForKey:@"retweeted"] boolValue];
我收到此错误:
如何解决这个问题?
答案 0 :(得分:14)
BOOL *retweeted;
这是错误的,布尔值是标量,而不是Objective-C对象,所以它们不需要被声明为指针。使用
BOOL retweeted;
代替。
答案 1 :(得分:14)
我首选的方法是:
BOOL success = [[responseObject valueForKey:@"success"] boolValue]
清洁,简洁和内联。
答案 2 :(得分:8)
使用NSJSONSerialization
序列化后,布尔值存储为NSNumber
。如果你看一下它实际存储的类型是__NSCFBoolean
但是没关系。 NSNumber
是一个不存在的抽象类。系统使用具体类存储该值。
所以
NSNumber* boolean = [serializedDictionary valueForKey:@"boolValue"];
这会为@0
返回NO
,为@1
返回YES
。您可以通过执行以下操作将is用作booleanValue:
if(boolean.boolValue){
// ...
}