NSString为null,但代码不识别为null

Shu*_*aib 0 objective-c

我有这个应用程序,我填充NSDictionary,然后在字典上进行计算.

            tmp = nil;
            tmp = [singleEvent objectForKey:@"start_date"];

            if(tmp == nil)
            {
                startDate = [dateFormatter dateFromString:@"1800/1/1 12:00:00"];
            }
            else
            {
                startDate = [dateFormatter dateFromString:tmp];
            }
Run Code Online (Sandbox Code Playgroud)

tmp是一个NSString对象,而singleEvent是一个NSDictionary.两者都在别处宣布.为简单起见,我没有包含该部分代码.

字典的关键字"start_date"有时会包含字符串格式的日期,有时它将为null.

我已经处理了它将为null的条件,但代码永远不会命中该行.我通过调试发现,即使tmp为null,执行也会转到else部分.

在调试模式下,我在观看tmp时得到这个:

tmp =(NSNull*)

但还是块被击中了. 所以我总是得到一个空指针异常.

Nic*_*rge 9

NSNull与...不同nil.NSNull(或者,更明确地说,[NSNull null])是一个单例,用于表示可以在Foundation集合类中使用的"nil"概念.因为它是单身,你不必使用-isEqual:,你可以直接比较它.

要检查NSNull,您可以这样做:

if (tmp == [NSNull null])
Run Code Online (Sandbox Code Playgroud)