我的代码中有一个简单的方法,如下所示:
- (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; }
这样做的目的是转到Settings包,并从PSTextFieldSpecifier中检索一个值.如果我手动进入并添加一些任意文本,代码将按预期工作.但是,每当我第一次在新设备上安装应用程序时,第一个条件就是执行为false,这应该是真的.单步执行代码后,gdb证明该对象确实是零:
(gdb)po t_gName
(null)
我在这里做错了什么?为什么第一次安装应用程序并且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; }