2012-02-29 52 views
5

我有一個iPhone應用程序,它允許用戶登錄並與Web服務交互。我希望用戶能夠在一段時間不活動後自動註銷...更具體地說,如果應用程序已經在一段時間後(例如1小時)在後臺。當進入前景時,檢查iPhone應用程序已進入後臺的時間長度

我會非常想運行在檢查應用了多長時間的背景,然後,如果它已經超過允許的時間,帶他們到登錄屏幕的應用程序委託方法applicationWillEnterForeground檢查。

如何在上述方法中運行此檢查?我將不勝感激一些示例代碼。

如果這不是實現我的要求的最佳方法,那麼建議也歡迎!

提前

安迪

回答

11

您可以使用此:

- (void)applicationWillResignActive:(UIApplication *)application 
{  
    NSDate *thisMagicMoment = [NSDate date]; 
    [[NSUserDefaults standardUserDefaults] setObject:thisMagicMoment forKey:@"lastMagicMoment"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    NSDate *thisMagicMoment = [NSDate date]; 
    NSDate *lastMagicMoment = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"lastMagicMoment"]; 

    if (lastMagicMoment==nil) 
    { 
     NSLog (@"First launch!"); 
    } 
    else 
    { 
     NSTimeInterval timeOfNoMagic = [thisMagicMoment timeIntervalSinceDate:lastMagicMoment]/3600.0; 
     NSLog (@"Application was in background for %.1f hours", timeOfNoMagic); 

     //do your stuff - treat NSTimeInterval as double 

     if (timeOfNoMagic > 1.0) 
     { 
      //logout 
     } 
    } 
} 
+1

(這是您可能會或可能不會同意的個人觀點...)雖然您很高興爲發佈問題的人員工作,但我認爲最好是發佈一些指南,問題可能會在編寫自己的實現時發現更多信息或想法。堆棧溢出正在逐漸獲得以「請發佈一些代碼」結束的問題,然後代碼在另一個問題中出現:「我有這段代碼,現在我想做這個額外的代碼,請發佈代碼」。這並不能真正幫助學習。 – 2012-02-29 12:46:47

+3

@尼克:從教育的角度來看,我同意70%。我認爲編碼必須從學習文檔中學習,並且看到(有時是複製粘貼)現成的代碼。僅僅從蘋果的文檔中學習會是一件痛苦的事情......但是:SO並不僅僅用於學習 - 許多人用它作爲解決非關鍵問題(提高生產力)的短代碼片段的公共存儲庫。這就是說:我在一小時前給你和阿德的回答+1,完全是因爲他們是有教育意義的。我會(如果我可以)給我也+1,因爲它可以爲有相同'問題'的任何人提供時間。 :-) – 2012-02-29 13:05:59

+2

好點,做得很好。這裏 - 有這個+1 :-) – 2012-02-29 13:26:56

2

非常感謝寫在應用程序進入後臺或者跳槽的NSUserDefaults的時間和日期。然後從applicationWillEnterForeground中讀取NSUserDefaults的時間和日期並進行比較。如果超過1小時(或任何您設定的超時時間),則顯示登錄屏幕。

2

保存應用程序進入NSUserDefaults後臺的時間。然後在重新進入前景時讀取它。

在applicationWillEnterForeground中,如果時差超過1小時,您可以設置標誌或發佈通知。也就是說,您的應用程序委託中可以有一個方法將用戶註銷,或者您可以檢查viewWillAppear中的標誌,如果需要,可以將用戶註銷。

0

第一套方法的applicationDidFinishLaunching定時器:

現在檢查的方法applicationDidBecomeActive:中時:這就是所謂的每次當用戶再次啓動應用程序。

如果時間大於前(1小時),則重置計時器並註銷用戶。

+0

其實你應該停止所有正在運行的定時器時aplication進入後臺。 – 2012-02-29 11:30:28

相關問題