如何区分CoreData中的布尔值和NSNumber

时间:2015-07-02 09:24:58

标签: ios json core-data serialization kvc

我有一些解析代码用于序列化和反序列化我们的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。有没有办法可以自动保留或失败,有没有办法可以咨询模型以查看属性类型的设置?

2 个答案:

答案 0 :(得分:2)

每个实体的元数据都存储在NSEntityDescriptionNSAttributeDescription中。您可以通过以下方式从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]];

希望它可以提供帮助