嗨,我正在使用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];}
Run Code Online (Sandbox Code Playgroud)
我理解它的方式是类的用户可以将C样式的空指针传递给反序列化器,当它遇到NSNull时,它将插入传递给它的值(NULL).所以稍后当我使用这些值时,我不会得到NSNull,而是NULL.
这看起来很奇怪,返回值是一个只能包含Objects的NSDictionary,不应该默认值为'nil'吗?
如果是NULL,我可以检查这样的值吗?
if([jsonDataDict objectForKey:someKey] == NULL)
Run Code Online (Sandbox Code Playgroud)
能够做到这一点似乎更符合逻辑:
if(![jsonDataDict objectForKey:someKey])
Run Code Online (Sandbox Code Playgroud)
更不用说允许传递nil但传递NULL导致崩溃的所有情况.
或者我可以将'nil'传递给解串器吗?
这很大程度上源于我仍在努力与nil,NULL,[NSNULL null],也许我没有看到使用nil的潜在警告.