我的代码中有一个简单的方法,如下所示:
- (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
(空)
我在这里做错了什么?为什么第一次安装应用程序并且t_gName是空/空PSTextFieldSpecifier时条件失败。我甚至尝试在我的设置包中添加一个空字符串中的DefaultValue。
答案 0 :(得分:15)
[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;
}
答案 1 :(得分:1)
试试这个:
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedFirstTime"])
{
// app already launched
NSLog(@"app already launched");
}
else
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedFirstTime"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"First Time");
// This is the first launch ever
}
}