RESTKit对象BOOL属性为true / false JSON

问题描述 投票:7回答:4

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

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

@property (nonatomic) BOOL exported;

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

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

ios objective-c restkit
4个回答
2
投票

另外;你可以把它变成bool而不是BOOL,restkit会正确地解析它。

@property (nonatomic) bool exported;

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


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


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

0
投票

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

dynamic var exported: Bool = false

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

© www.soinside.com 2019 - 2024. All rights reserved.