ios - 如何区分 CoreData 中的 Boolean 和 NSNumber

标签 ios json core-data serialization kvc

我有一些解析代码用于从我们的 Web 服务序列化和反序列化对象,在序列化 bool 值时我遇到了一些问题。

序列化看起来像这样:

 - (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。有没有一种方法可以自动保留或失败,有没有一种方法可以查询模型以查看属性类型设置为什么?

最佳答案

每个实体都有其元数据存储在 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
}

关于ios - 如何区分 CoreData 中的 Boolean 和 NSNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31180664/

相关文章:

ios - OpenGL ES 2 (iOS) 体积线实现

ios - 如何同时处理三个请求正确创建并发队列

ios - 将 React Native 集成到现有 Swift 项目中 : 'string' file not found

javascript - 无法从 json 填充 html 表

json - BigQuery json 导出使用什么格式?

ios - RestKit - postObject 跳过参数

ios - Sqlite 或 Core Data 更新超过 50000 条记录

ios - 如何摆脱UITabBar中第一个和最后一个项目之前和之后的空间?

javascript - 如何使 JSON.stringify 在没有 "post-processing"的情况下以 ascii 安全转义形式 (\uXXXX) 编码非 ascii 字符?

iphone - 当上下文保存在核心数据中时,如何更改实体?