我有一些解析代码用于从我们的 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。有没有一种方法可以自动保留或失败,有没有一种方法可以查询模型以查看属性类型设置为什么?
最佳答案
每个实体都有其元数据存储在 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
}
关于ios - 如何区分 CoreData 中的 Boolean 和 NSNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31180664/