我的代码中有一个简单的方法,如下所示:
- (BOOL)isFirstTimeLogin
{
NSString *t_gName =
[NSString stringWithFormat:@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:kGroupIdentifierKey]];
if ([t_gName isEqualToString:@""] || t_gName == nil) {
DLog(@"LoginViewController, m:::isFirstTimeLogin, First time login happening.");
return YES;
}
DLog(@"LoginViewController, m:::isFirstTimeLogin, Not a first time login.");
return NO;
}
简单来说,它所做的就是转到设置包,并从 PSTextFieldSpecifier 中检索一个值。如果我手动进入并添加一些任意文本,代码将按预期工作。但是,每当我第一次在新设备上安装该应用程序时,第一个条件执行为 false,它应该为 true。单步执行代码后,gdb 证明该对象确实也是 nil:
(gdb) po t_gName
(空)
我在这里可能做错了什么?为什么第一次安装应用程序时条件失败并且 t_gName 是空/空 PSTextFieldSpecifier。我什至尝试在我的设置包中添加一个空字符串的 DefaultValue。
最佳答案
[NSString stringWithFormat:@"%@", nil];
这会创建这样的东西:
@"(null)"
因此既不nil
也不等于@""
。
顺便说一下
- 你根本不需要
stringWithFormat:
。 - 不检查
string == nil
但检查!string
- 您不必检查空字符串,因为有一组或者它是
nil
。 - 使用比
t_gName
更好的名称,没有理由使用短名称。
像这样:
- (BOOL)isFirstTimeLogin
{
NSString *groupIdentifier = [[NSUserDefaults standardUserDefaults]
objectForKey:kGroupIdentifierKey];
if (!groupIdentifier) {
DLog(@"First time login.");
return YES;
}
DLog(@"Not a first time login.");
return NO;
}
关于iphone - 如何使用 NSUserDefaults 正确工作(检索值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/603593/