【发布时间】:2011-04-19 13:16:16
【问题描述】:
嗨 我正在使用 TouchJSON 反序列化一些 JSON。我过去一直在使用它,在那些情况下,我手动处理了 NSNull 的出现。我认为作者也必须处理这个问题,所以我再次这样做只是开销。然后我在文档中找到了这个:
在输出中避免 NSNull 值。
NSData *theJSONData = /* some JSON data */
CJSONDeserializer *theDeserializer = [CJSONDeserializer deserializer];
theDeserializer.nullObject = NULL;
NSError *theError = nil;
id theObject = [theDeserializer deserialize:theJSONData error:&theError];}
按照我的理解,该类的用户可以将 C 风格的空指针传递给反序列化器,当它遇到 NSNull 时,它将插入传递给它的值(NULL)。所以稍后当我使用这些值时,我不会得到 NSNull,而是 NULL。
这看起来很奇怪,返回值是一个只能包含 Objects 的 NSDictionary,该值不应该默认为 'nil' 吗?
如果为 NULL,我可以检查这样的值吗?
if([jsonDataDict objectForKey:someKey] == NULL)
这样做似乎更合乎逻辑:
if(![jsonDataDict objectForKey:someKey])
更不用说允许传递 nil 但传递 NULL 会导致崩溃的所有情况。
或者我可以将“nil”传递给反序列化器吗?
这很大程度上源于我仍在为 nil、NULL、[NSNULL null] 苦苦挣扎,也许我没有看到使用 nil 的潜在警告。
【问题讨论】:
-
我在下面发表了评论,但为了这个问题的后代,NSDictionary 不能包含 nil 作为键或值。来自 Cocoa 文档:“键和值都不能为 nil;如果您需要在字典中表示空值,则应使用 NSNull。”
标签: objective-c null touchjson