我正在尝试检查某个视图是否已在应用的生命周期中加载过。我已经实现了以下代码,但不太确定它为什么不起作用。它只在视图控制器的viewDidLoad方法中完成(也许这就是问题)。如果有人能告诉我我的错误是什么,我们将不胜感激。谢谢!
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL hasRunBefore = [defaults boolForKey:@"FirstRun"];
if (hasRunBefore) {
NSLog (@"not the very first time this controller has been loaded");
[defaults setBool:YES forKey:@"FirstRun"];
[defaults synchronize];
}
else if (!hasRunBefore) {
[defaults setBool:NO forKey:@"FirstRun"];
NSLog (@"the very first time this controller has been loaded");
[defaults synchronize];
}
答案 0 :(得分:2)
您的代码中存在一些错误。请参阅以下更正:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL hasRunBefore = [defaults boolForKey:@"FirstRun"];
if (hasRunBefore) {
NSLog (@"not the very first time this controller has been loaded");
/* Toggle the boolean state */
[defaults setBool:NO forKey:@"FirstRun"];
}
else if (!hasRunBefore) {
/* Toggle the boolean state */
[defaults setBool:YES forKey:@"FirstRun"];
NSLog (@"the very first time this controller has been loaded");
}
[defaults synchronize];
但是,我不确定你为什么要在if(hasRunBefore)中将FirstRun切换回NO。我只指出出了什么问题,你可能想再次检查你的逻辑。
CNC中 就像我指出你的逻辑一样,你应该只有这个:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL hasRunBefore = [defaults boolForKey:@"FirstRun"];
if (!hasRunBefore) {
[defaults setBool:YES forKey:@"FirstRun"];
[defaults synchronize];
NSLog (@"the very first time this controller has been loaded");
}
else
NSLog (@"Not the first time this controller has been loaded");
答案 1 :(得分:1)
只要应用程序安装在设备上,默认设置的值就会保持不变。
您应该考虑使用应用程序委托中设置的BOOL值(从运行到运行不会持久)
OR
您应该在以下方法中将“FirstRun”设置为您的app委托中的NO。
- (void)applicationWillTerminate:(UIApplication *)application
答案 2 :(得分:1)
NSUserDefaults是一种可能,但您也可以使用静态BOOL
并在第一次加载视图控制器时将其设置为YES
。