0

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

我有一个方法,它采用这个类对象并使用它来设置网络调用。我的问题是,如果不需要参数,则将字典设置为 null 这很好,这就是我想要的,但是由于某种原因,当我执行 if 语句来检查字典是否为 null 时,它正在命中 else声明它不为空。方法看起来像这样

-(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 计数]:无法识别的选择器发送到实例 0xaf8678 2012-11-23 11:48:44.005 测试 [3403:14003] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[NSNull 计数]:无法识别的选择器发送到实例 0xaf8678'

我这辈子都想不通。任何帮助将非常感激

4

4 回答 4

1

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

于 2012-11-23T11:58:41.810 回答
1

用这个

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

}
于 2012-11-23T12:05:13.900 回答
0

您需要使用 nil 而不是 NULL。

 if (dict == nil)

...

于 2012-11-23T11:57:09.793 回答
0

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

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

其次,使用正确的格式化程序NSLog%d而不是%i.

于 2012-11-23T12:01:39.207 回答