12小时后,重新启动应用程序c

时间:2013-09-25 23:43:35

标签: ios objective-c performselector application-restart

我有一个具有loginVC的应用程序,当用户登录时我希望在12小时后应用程序使用这些行-(void)logout调用方法[self performSelector:@selector(logout) withObject:nil afterDelay:43200];,在viewDidLoad方法中UserLoggedVC。 如果应用程序在afterDelay中打开或在后台使用短时间参数,例如600秒(10分钟),则该方法称为精细,但是如果长时间如43200秒(12小时),并且应用程序在后台永远不会调用该方法。

我希望你能帮助我

3 个答案:

答案 0 :(得分:4)

performSelector: withObject: afterDelay:基本上只是一个计时器,后台不允许使用计时器。

相反,您应该只记录用户首次登录应用程序并保存时的时间戳。然后,每次应用程序到达前台时,只需检查从当前时间到登录时间是否为12小时。

答案 1 :(得分:2)

您不能指望您的应用程序在内存中存活12小时。当应用程序进入后台时,操作系统最终会将其终止,因此您的方法永远不会执行。

此处的方法可以是存储上次用户活动的日期,并在用户打开应用程序时检查当前用户活动的日期,或执行检查服务器端并强制注销。

答案 2 :(得分:2)

Gabriele和tdevoy的答案清楚地说明了为什么不可能。所以我不会重复同样的事情,相反,如果你不知道该怎么做,这就是你可以尝试的方式:

viewDidLoad中,将登录时间存储在NSUserDefaults

NSDate *currentDate= [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:currentDate forKey:@"loggedInTime"];

现在使用applicationDidBecomeActive委托方法,

NSDate *loggedInTime = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"loggedInTime"];
NSTimeInterval timeSpentInApp = [[NSDate date] timeIntervalSinceDate:loggedInTime];
//if this timeSpentInApp is greater than 43200, then you can call logout. 
//(Make sure after relogin, the loggedInTime value was updated again.)

但是,如果用户持续使用该应用12小时,那么您也应该考虑使用您的代码段,因为这只会在应用来自后台时调用。