我有一个包含用于进行Web调用的字典的类。基本上,键值对用于创建将在网络调用需要任何值时发布到URL的数据。这个对象类是使用JSON设置的。NULL字典未计为NULL
我有一个方法,它需要这个类的对象,并使用它来设置网络调用。我的问题是,如果没有参数是必需的,那么字典设置为null这是很好,这是我想要的,但由于某种原因,当我做一个if语句来检查字典是否为空,它是击中else声明它不是null。方法是这样的
-(void)webCall :(WebServiceCall *)webCall_p
{
//Creates a dictionary from the one stored in the WebResponse Class
NSMutableDictionary *dict = [[webCall_p getWebServiceResponse] getVariablesByRegexMap];
NSLog(@"%@", dict);
}
当我把它打印出来,我得到这个
<null>
然而,如果我把一个if语句来检查它是否是空像这样
if(dict == NULL)
{
NSLog(@"NULL");
}
else
{
NSLog(@"Not NULL");
}
它说不是空。如果我尝试使用字典计数命令,像这样
NSLog(@"%i", [dict count]);
的应用程序崩溃,并提出了这个错误
- [NSNull计数]:无法识别的选择发送到实例0xaf8678 2012年11月23日11:48:44.005测试[3403:14003] * 终止应用程序由于未捕获的异常 'NSInvalidArgumentException' 的,原因是: ' - [NSNull计数]:无法识别 选择发送到实例0xaf8678'
我不能为我的生活弄清楚这一点。任何帮助将不胜感激
这一个伟大的工程,欢呼声。我不明白的是为什么会发生这种情况,对于我班上的其他字典,通常的字典== nil方法工作正常,或[字典计数]有效,我不确定为什么这个特别的调用计数崩溃的应用程序 – AdamM
我不知道这个案件的细节,但我可以尝试解释一般。在某些情况下,对象不能为零。对于这些情况,引入了“空”单例对象NSNull。它从NSObject继承,因此完成了适当对象必须做的所有事情。但它代表着“无”的价值。如果有疑问,您需要返回相关文档或者直接试用。大多数时候你会处理零/空,但有时NSNull来得心应手。 –
我的情况有点复杂,我使用JSON创建了一个相当大的框架,之前我没有遇到过这个问题,所以我不确定我做了什么不同。我将不得不对我的框架中的其他一些类进行进一步测试,以查看是否发生了相同的事情。至少我将知道如果我再次遇到此错误需要注意什么,再次感谢您的信息! – AdamM