我有一些解析代码用于序列化和反序列化我们的Web服务中的对象,并且在序列化布尔值时遇到了一些问题。
序列化如下所示:
- (NSDictionary *)dictionaryRepresentationWithMapping:(NSDictionary *)mappingDictionary
{
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc]init];
for (id key in[mappingDictionary allKeys])
{
id value = [self valueForKey:key];
if ((value != [NSNull null]) && (![value isKindOfClass:[NSNull class]]) && (value != nil))
{
[dictionary setObject:value forKey:mappingDictionary[key]];
}
}
return [NSDictionary dictionaryWithDictionary:dictionary];
}
问题是,当我在我的NSManagedObject上调用valueForKey:然后将其添加到我的字典中时,我最终得到的值就像我正在调用一样:
[dictionary setObject:@1 forKey:mappingDictionary[key]];
而不是:
[dictionary setObject:@YES forKey:mappingDictionary[key]];
这意味着当我将其转换为JSON时,在下一阶段,我向服务器发送1而不是true。
所以我需要的是一种保留这一事实的方法,即这是一个代表bool而不是数字的NSNumber。我已经尝试过要课,但我刚回到NSNumber。有没有办法可以自动保留或失败,有没有办法可以咨询模型以查看属性类型的设置?
答案 0 :(得分:2)
每个实体的元数据都存储在NSEntityDescription
和NSAttributeDescription
中。您可以通过以下方式从NSManagedObject
访问它们:
//you can put this inside the for loop
NSAttributeDescription *attributeDescription = self.entity.attributesByName[key];
if(attributeDescription.attributeType == NSBooleanAttributeType) {
//it is a boolean attribute
}
答案 1 :(得分:0)
向服务器发送呼叫时,您可以这样做:
[dict setValue:[NSNumber numberWithBool:YES] forKey:mappingDictionary[key]];
;
或者换句话说,您可以为服务器端建模以将其值保留为布尔值,此时,只需要像这样发送[dict setValue:YES] forKey:mappingDictionary[key]];
希望它可以提供帮助