检查之前是否已加载视图控制器

时间:2012-08-11 01:51:37

标签: objective-c ios xcode

我正在尝试检查某个视图是否已在应用的生命周期中加载过。我已经实现了以下代码,但不太确定它为什么不起作用。它只在视图控制器的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];
                     }

3 个答案:

答案 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