找出JSON中的值是否为布尔值(true / false)

时间:2013-11-19 23:53:51

标签: ios iphone objective-c json boolean

我在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

1 个答案:

答案 0 :(得分:2)

我现在正在我的应用程序中执行此操作,其中 - 很好 - 未完全认可,但在iOS7中使用NSJSONSerialization似乎工作得很好:

if(strcmp([num objCType], "c") == 0) {
   // its a boolean
   ...

告诫我们,Apple在课堂描述中说,你不能指望它是一致的。也就是说,如果NSJSONSerialization只使用一种方法转换导致此类型的bool,它可能不会很快改变。