NULL字典未评估为NULL

时间:2012-11-23 11:52:37

标签: objective-c

我有一个类,其中包含用于进行Web调用的字典。基本上,如果Web调用需要任何值,则键值对用于创建将发布到URL的数据。此对象类使用JSON设置。

我有一个方法,它接受这个类对象并使用它来设置Web调用。我的问题是,如果不需要参数,那么字典被设置为null,这很好,这是我想要的,但出于某种原因,当我做一个if语句来检查字典是否为空时,它正在击中其他声明表明它不为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语句来检查它是否为null

 if(dict == NULL)
    {
        NSLog(@"NULL");
    }
    else
    {
        NSLog(@"Not NULL");
    }

它说不是空的。如果我尝试使用dict count命令,就像这样

NSLog(@"%i", [dict count]);

应用程序崩溃并显示此错误

  

- [NSNull count]:发送到实例0xaf8678的无法识别的选择器2012-11-23 11:48:44.005测试[3403:14003] *   由于未捕获的异常而终止应用程序   'NSInvalidArgumentException',原因:' - [NSNull count]:无法识别   选择器发送到实例0xaf8678'

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

4 个答案:

答案 0 :(得分:1)

值显然是NSNull,它是一个对象,而不是nil。 NSNull是一个单身if (dict == NSNull)应该工作。

答案 1 :(得分:1)

使用此

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

}

答案 2 :(得分:0)

您需要使用nil而不是NULL。

 if (dict == nil)

...

答案 3 :(得分:0)

首先,如果您想检查是否存在,请检查nil,而不是NULL

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

其次,对NSLog使用正确的格式化程序,%d代替%i