字符串通过空测试,Returns null
String Passes Empty Test, Returns null
我正在测试以查看字符串是否存储在 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 )
谢谢。
nil
字符串不等于空字符串。这就是为什么第一个测试通过但 returns nil
- 因为如果没有存储值,NSUserDefaults 将 return nil。
将长度与零进行比较的原因是,在 objective-c 中对 nil
引用调用方法时,nil
是 returned。这与大多数其他语言不同,后者在这种情况下会抛出异常。因为长度是 NSInteger,所以 nil
变为零。
将长度与零进行比较应该是安全的,但您真正要测试的是默认情况下是否为给定键存储了一个字符串。在这种情况下,您可以简单地与 nil:
进行比较
if ([[NSUserDefaults standardUserDefaults] authorName] != nil)
{
....
}
我正在测试以查看字符串是否存储在 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 )
谢谢。
nil
字符串不等于空字符串。这就是为什么第一个测试通过但 returns nil
- 因为如果没有存储值,NSUserDefaults 将 return nil。
将长度与零进行比较的原因是,在 objective-c 中对 nil
引用调用方法时,nil
是 returned。这与大多数其他语言不同,后者在这种情况下会抛出异常。因为长度是 NSInteger,所以 nil
变为零。
将长度与零进行比较应该是安全的,但您真正要测试的是默认情况下是否为给定键存储了一个字符串。在这种情况下,您可以简单地与 nil:
进行比较if ([[NSUserDefaults standardUserDefaults] authorName] != nil)
{
....
}