2012-11-23 111 views
0

我有一个包含用于进行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'

我不能为我的生活弄清楚这一点。任何帮助将不胜感激

回答

1

Aparently值IST NSNull,它是一个对象,而不是零。 NSNull是一个单身人士if (dict == NSNull)应该工作。

+0

这一个伟大的工程,欢呼声。我不明白的是为什么会发生这种情况,对于我班上的其他字典,通常的字典== nil方法工作正常,或[字典计数]有效,我不确定为什么这个特别的调用计数崩溃的应用程序 – AdamM

+1

我不知道这个案件的细节,但我可以尝试解释一般。在某些情况下,对象不能为零。对于这些情况,引入了“空”单例对象NSNull。它从NSObject继承,因此完成了适当对象必须做的所有事情。但它代表着“无”的价值。如果有疑问,您需要返回相关文档或者直接试用。大多数时候你会处理零/空,但有时NSNull来得心应手。 –

+0

我的情况有点复杂,我使用JSON创建了一个相当大的框架,之前我没有遇到过这个问题,所以我不确定我做了什么不同。我将不得不对我的框架中的其他一些类进行进一步测试,以查看是否发生了相同的事情。至少我将知道如果我再次遇到此错误需要注意什么,再次感谢您的信息! – AdamM

0

您需要使用nil而不是NULL。

if (dict == nil) 

...

+0

我已经试过零很好,应该已经包括在我的问题,同样的事情发生 – AdamM

0

首先,如果你想检查是否存在 - 然后检查nil,不NULL

if (dict) { // or (dict == nil) 
    // do something 
} 

其次,使用正确的格式为NSLog%d代替%i

+0

我尝试了这两种方法,他们没有为这个工作 – AdamM

1

使用此

if ([dict isKindOfClass:[NSNull class]]){ 

} 
+0

这一个也工作,欢呼 – AdamM