ios - 确定 JSON 中的值是否为 boolean 值(真/假)

标签 ios iphone objective-c json boolean

我在 NSManagedObject 上编写一个类别,这样它就可以从我从 JSON 中获得的 NSDictionnary(通过 NSJSONSerialization)填充它自己的属性

我的问题是:如果原始值是 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];
            }
        }

我得到错误:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key myJsonOriginalKeyName

同样,当原始 JSON 中的值 id 为 true/false 时,我的托管对象具有对应键的 boolean 属性 我如何自动确定我是否应该将值转换为 BOOL 或 NSNumber

最佳答案

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

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

请注意,Apple 在类描述中说您不能指望它是一致的。也就是说,如果 NSJSONSerialization 仅使用一种方法来转换导致这种类型的 bool,它可能不会很快改变。

关于ios - 确定 JSON 中的值是否为 boolean 值(真/假),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20084715/

相关文章:

ios - 如何在“照片”图像的“打开方式或共享方式”中添加应用程序?

ios - 使用我自己的服务器验证 iOS 应用内购买

ios - xcode 7 TableView Controller

iphone - 使用 ASIHTTPREQUEST 库发送同步请求,在 iPhone 中显示事件指示器

objective-c - 可以使用CoreAudio获取音频流数据到系统输出设备吗?

iphone - 不同设备返回的mac地址相同

iphone - 如何从 UIView 访问 UIViewController 的按钮?

iphone - 可以使用什么来避免 msgSend 函数开销?(Obj-c)

javascript - 使用 JavascriptCore 创建构造函数

objective-c - 交换 View - NSWindowController 和 NSViewController