Restkit从NSNumber序列化布尔值

时间:2012-07-08 05:40:59

标签: objective-c serialization restkit nsnumber

其中一个托管对象有一个由NSNumber类型表示的属性“isMember”。当通过RestKit序列化到Json post body时,它总是给出0/1而不是YES / NO或true / false。从json结果映射到对象时,RestKit能够成功将YES / NO转换为NSNumber。强制将布尔属性序列化为YES / NO或true / false的方法是什么?

Serialize: 0 -> 0, 1 -> 1

Deserialize : YES/true -> 1, NO/false -> 0

2 个答案:

答案 0 :(得分:3)

在NSNumber表示中,0等于NO,1等于YES;此外,BOOL是整数兼容类型,通常是unsigned char。这里没有矛盾。

答案 1 :(得分:3)

您可以使用其中一种委托方法手动更改值:

- (void)objectLoader:(RKObjectLoader *)objectLoader didSerializeSourceObject:(id)sourceObject toSerialization:(inout id<RKRequestSerializable> *)serialization
{
    NSMutableDictionary *params = ((NSDictionary*)*serialization).mutableCopy;
    NSNumber *value = [params objectForKey:@"myBoolean"];
    [params setObject:value.boolValue ? @"true" : @"false" forKey:@"myBoolean"];
    *serialization = params;
}

<强>更新

我发现这只有在您将正文作为普通text / html参数发送时才有效。将 RKObjectManager serializationMIMEType 设置为 RKMIMETypeJSON 时,序列化对象将是json作为NSData。在这种情况下,您仍然可以操作序列化对象,但您必须解析json,更改它然后再次序列化。