我在NSManagedObject上编写一个类别,因此它可以从我从JSON(通过NSJSONSerialization)的NSDictionnary填充其属性本身
我的问题是:如果原始值为true或false,则将其转换为NSNumber,但我想将其作为BOOL(我知道boolValue)插入到托管对象中,并且仅当它是最初是BOOL而不是数字。 到目前为止,我的相关代码是:
if ([value isKindOfClass:[NSNumber class]])
{
if (NSClassFromString(@"__NSCFBoolean") && [value isKindOfClass:NSClassFromString(@"__NSCFBoolean")]) {
[self setValue:[NSNumber numberWithBool:[value boolValue]] forKey:key];
} else if (NSClassFromString(@"NSCFBoolean") && [value isKindOfClass:NSClassFromString(@"NSCFBoolean")]) {
[self setValue:[NSNumber numberWithBool:[value boolValue]] forKey:key];
} else {
[self setValue:value forKey:key];
}
}
我收到错误:
由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:此类不是密钥值编码兼容的密钥myJsonOriginalKeyName
同样,我的托管对象在原始JSON中的值id为true / false时具有相应键的布尔属性 如何自动确定是否应将值转换为BOOL或NSNumber
答案 0 :(得分:2)
我现在正在我的应用程序中执行此操作,其中 - 很好 - 未完全认可,但在iOS7中使用NSJSONSerialization似乎工作得很好:
if(strcmp([num objCType], "c") == 0) {
// its a boolean
...
告诫我们,Apple在课堂描述中说,你不能指望它是一致的。也就是说,如果NSJSONSerialization只使用一种方法转换导致此类型的bool,它可能不会很快改变。