如何在SBJSON中测试NSDictionary中的null?

ran*_*omx 0 objective-c ios5 xcode4.3

我有一个API返回一个JSON编码的数据字符串,返回一个实数或"null"作为一个值.只要JSON包含数字或字符串值,一切都按预期工作.如果key:value对值为null,则下面的代码崩溃.

当从SBJSON获取NULL时,如何正确测试NSDictionary objectForKey?

当API 为filetype返回null时,下面的代码在if()行崩溃.

我的Objective-C代码尝试测试期望值:

if (1 == [[task valueForKey:@"filetype"] integerValue]) {
    // do something
} else {
    // do something else
}
Run Code Online (Sandbox Code Playgroud)

API JSON输出:

{"tclid":"3","filename":null,"filetype":null}
Run Code Online (Sandbox Code Playgroud)

NSDictionary的NSLog()输出是:

task {
    filename = "<null>";
    filetype = "<null>";
    tclid = 3;
}
Run Code Online (Sandbox Code Playgroud)

Jos*_*ell 5

将数据从JSON传输到Cocoa集合时,NSNull该类用于表示"无值",因为Cocoa集合不能有空插槽.<null>是如何NSNull打印自己.

要测试这个,你可以使用someObject == [NSNull null].它是一个单例 - NSNull每个进程只有一个实例- 所以指针比较有效,尽管你可能更喜欢遵循通常的Cocoa比较约定和使用[someObject isKindOfClass:[NSNull class]].

您正在收到崩溃,因为您正在发送integerValueNSNull对象.NSNull没有回应integerValue并提出异常.