RESTKit对象BOOL属性为true / false JSON

时间:2013-07-26 06:04:39

标签: ios objective-c restkit

我有一些对象,我在请求正文中作为JSON发送到服务器,用于POST请求。我的问题与布尔属性有关。

假设我在作为JSON发送的对象中有此属性:

@property (nonatomic) BOOL exported;

默认情况下,RestKit在JSON中将布尔值发送为10。如何设置RestKit以便所有BOOL以truefalse(JSON布尔类型)发送。

有趣的是,当从另一个方向,从JSON truefalse到BOOL属性时,RestKit读取JSON true/false就好了,适当地设置属性。

4 个答案:

答案 0 :(得分:2)

可替换地;你可以把它变成一个bool而不是BOOL,restkit会正确地解析它。

@property (nonatomic) bool exported;

它在读取中正确处理它的原因是bool本身只有1或0 ......所以Restkit足够聪明,可以将它转换为BOOL。

答案 1 :(得分:1)

Source type :NSCFBoolean 
Destination type : NSString
Discussion: Boolean literals true and false parsed from JSON are mapped to NSString properties as @"true" and @"false"

来源:See This table

答案 2 :(得分:1)

这个问题源于SQLite没有布尔数据类型的事实。因此,如果我的核心数据模式中有一个布尔值,它仍然最终存储为SQLite中的整数(int值为1或0)。这就是我在通过RestKit输出JSON时看到10的原因。

要解决此问题,我将我的属性从原始问题从BOOL更改为NSNumber

@property (nonatomic) NSNumber *exported;

每当我分配给这个属性时,我需要用NSNumber布尔值设置它。

   target.exported = [NSNumber numberWithBool:[self.exported boolValue]];

现在生成的JSON是正确的,因为我使用boolValue设置NSNumber:

"exported" : true

答案 3 :(得分:0)

如果有人在Swift中使用RestKit,并且像我一样有问题,请不要忘记将dynamic修饰符添加到属性中,并且Bool变量不能是可选的。因此请使用以下内容:

dynamic var exported: Bool = false

检查问题:Bool Property Cannot be marked dynamic in swift