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