我有一些对象,我在请求正文中作为JSON发送到服务器,用于POST请求。我的问题与布尔属性有关。
假设我在作为JSON发送的对象中有此属性:
@property (nonatomic) BOOL exported;
默认情况下,RestKit将布尔值发送为JSON中的1
或0
。如何设置RestKit以便将所有BOOL作为true
或false
(这是JSON布尔类型)发送。
有趣的是,当从另一个方向,从JSON true
或false
到BOOL属性,RestKit读取JSON true/false
就好了,适当地设置属性。
另外;你可以把它变成bool而不是BOOL,restkit会正确地解析它。
@property (nonatomic) bool exported;
它在读取中正确处理它的原因是bool本身只有1或0 ...所以Restkit足够聪明,可以将它转换为BOOL。
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
这个问题源于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
如果有人在Swift中使用RestKit,并且像我一样使用它,请不要忘记将dynamic
修饰符添加到属性中,并且Bool
变量不能是可选的。因此使用以下:
dynamic var exported: Bool = false