2012-08-11 76 views
0

我正在嘗試檢查某個視圖是否曾在應用程序的生命週期中加載過。我已經實現了下面的代碼,但不太確定它爲什麼不起作用。它只在視圖控制器的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

通過一生,你的意思是1)在安裝應用程序,並卸載它之間,2)應用程序之間的啓動和應用終止? – 2012-08-11 05:51:07

回答

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]; 

但是,我不知道你爲什麼會想切換FirstRun回NO的,如果(hasRunBefore)。我只指出什麼是錯的,你可能想再次檢查你的邏輯。

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"); 
+0

這是Rick的問題,也許你知道發生了什麼事情。我做了你建議的更改,然後我從設備中刪除了應用程序,再次通過xcode運行它,並且它表示「應該首次加載...」。我停止了應用程序的運行並再次運行,這次它說「不是第一次......」再次如此。現在,當事情變得奇怪時,我嘗試第三次運行應用程序,它說「這是第一次...」,這是一個錯誤。你知道爲什麼嗎?再次感謝 – 2012-08-11 04:13:26

+0

@AlexG,我已經更新了答案。 – Rick 2012-08-11 04:47:00

+0

完美的作品非常感謝你! – 2012-08-11 05:56:41

1

只要應用程序安裝在設備上,默認值中設置的值就是持久的。

你應該考慮使用應用程序的委託設置一個布爾值(不從運行持續運行)

OR

你應該設置「FirstRun」回NO在您的應用程序代理以下方法。

- (void)applicationWillTerminate:(UIApplication *)application 
1

是NSUserDefaults的可能,但你也可以使用一個靜態BOOL當視圖控制器被加載首次將其設置爲YES

相關問題