我有一些对象,我在请求正文中作为JSON发送到服务器,用于POST请求。我的问题与布尔属性有关。
假设我在作为JSON发送的对象中有此属性:
@property (nonatomic) BOOL exported;
默认情况下,RestKit在JSON中将布尔值发送为1
或0
。如何设置RestKit以便所有BOOL以true
或false
(JSON布尔类型)发送。
有趣的是,当从另一个方向,从JSON true
或false
到BOOL属性时,RestKit读取JSON true/false
就好了,适当地设置属性。
答案 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"
答案 2 :(得分:1)
这个问题源于SQLite没有布尔数据类型的事实。因此,如果我的核心数据模式中有一个布尔值,它仍然最终存储为SQLite中的整数(int值为1或0)。这就是我在通过RestKit输出JSON时看到1
或0
的原因。
要解决此问题,我将我的属性从原始问题从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