2012-02-29 89 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

相关问题