首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有键值编码和布尔值的JSONKit

具有键值编码和布尔值的JSONKit
EN

Stack Overflow用户
提问于 2012-04-03 07:13:11
回答 1查看 904关注 0票数 1

我正在尝试序列化各种对象,方法是使用键值编码将它们转换为NSDictionary,然后使用JSONKit将NSDictionary序列化为NSString/NSData。我遇到了转换BOOL属性的问题。

KVC guidelines声明valueForKey:将通过[NSNumber numberWithBool:]为BOOL属性创建一个NSNumber。通过numberWithBool:创建的JSONKit states that NSNumbers将被序列化为true/false。我已经测试了JSONKit的声明,它工作正常。但是,当我使用KVC访问BOOL值时,我得到的对象看起来不像是通过numberWithBool:创建的。特别是,它的计算结果不等于kCFBooleanTrue,JSONKit将其用作布尔值的标记。最终结果是我的BOOL属性被序列化为0/1,而不是true/false,这给接收API带来了问题。

如何确定来自KVC的NSNumber是否来自BOOL属性?我是不是读错了苹果的文档?或者,有没有其他方法可以让这个序列化过程工作?

下面是失败的测试:

代码语言:javascript
复制
#import "JSONKit.h"

- (void) testCompareKVCBoolToNumberWithBool {
    NSNumber *numberBool = [NSNumber numberWithBool:YES];
    //This passes
    STAssertTrue(numberBool == (id)kCFBooleanTrue, @"Number %@ should kCFBooleanTrue.", numberBool);

    TestModel *model = [[TestModel alloc] init];
    model.boolProperty = YES;
    NSNumber *kvcBool = [model valueForKey:@"boolProperty"];
    //This fails
    STAssertTrue(kvcBool == (id)kCFBooleanTrue, @"Number %@ should be a kCFBooleanTrue.", kvcBool);

    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                      numberBool, @"numberBool",
                      kvcBool, @"kvcBool",
                      nil];
    NSString *jsonString = [dict JSONString];
    //This yields: jsonString: {"kvcBool":1,"numberBool":true}
    NSLog(@"jsonString: %@", jsonString);
}

下面是TestModel代码:

代码语言:javascript
复制
@interface TestModel : NSObject 
@property (assign)          BOOL            boolProperty;
@end

@implementation TestModel
@synthesize boolProperty = _boolProperty;
@end

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2012-06-09 12:27:23

您可能希望检查我的实现,它会自动执行此操作-- https://github.com/QBurst/KVCObjectSerializer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9985082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档