String Passes Empty Test,返回null

时间:2015-01-02 18:37:19

标签: ios null nsstring

我正在测试是否在NSUserDefaults中存储了一个字符串。从理论上讲,我认为以下是答案:

if ( ![[[NSUserDefaults standardUserDefaults] authorName] isEqual: @""] )
{
  NSLog(@"The default must be set, the string is not equal to empty.");
  NSString *authorName = [[NSUserDefaults standardUserDefaults] authorName];
}

在实践中,它总是测试某些东西在那里,但是当我尝试使用它时返回值“(null)”。有人可以告诉我为什么吗?

最终,我认为我已经用以下方法解决了这个问题,但我不清楚为什么第一个测试用例没有像我预期的那样工作。

if ( [[[NSUserDefaults standardUserDefaults] authorName]  length] != 0 )

感谢。

1 个答案:

答案 0 :(得分:1)

nil字符串不等于空字符串。这就是为什么第一个测试通过但返回nil - 因为如果没有存储值,NSUserDefaults将返回nil。

将长度与零进行比较的原因是因为在objective-c中nil引用上调用方法时,会返回nil 。这与大多数其他语言不同,在这种情况下会抛出异常。因为长度是NSInteger,nil变为零。

将长度与零进行比较应该是安全的,但您真正想要测试的是是否为默认值中的给定键存储了字符串。在这种情况下,您可以简单地与nil进行比较:

if ([[NSUserDefaults standardUserDefaults] authorName] != nil)
{
    ....
}