当前在我的iOS应用程序中,当用户退出到主屏幕并返回到应用程序时,它会请求在我的AppDelegate中设置的登录凭据。但是我想要做的是,如果用户退出应用程序并在例如2分钟内返回,则定时器重置并且用户不需要输入他的密码。当用户在2分钟后回到应用程序时,它会提醒他再次输入密码。任何帮助将不胜感激。谢谢!计时器离开应用程序并返回到ios
回答
使用NSUserDefaults
到NSDate
存储在您的应用程序代理
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:@"myDateKey"];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSDate *bgDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey: @"myDateKey"];
if(fabs([bgDate timeIntervalSinceNow]) > 120.00) {
//logout
}
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"myDateKey"];
}
更新:
好一点的@mun津如果应用程序必须实现的东西来处理时钟的变化,我们可以使用的东西像这样
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[NSUserDefaults standardUserDefaults] setFloat: [[NSProcessInfo processInfo] systemUptime] forKey:@"myDateKey"];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
float bgTime = [[NSUserDefaults standardUserDefaults] floatForKey: @"myDateKey"];
if(fabs([[NSProcessInfo processInfo] systemUptime] - bgTime) > 120.00) {
//logout
}
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"myDateKey"];
}
很明显,一旦手机重新启动,时间将在第如果我们必须确保我们添加验证。还要注意的是,myDateKey应该在适当的应用程序模式下被删除。
这个解决方案效果很好,但我得到了一个“快照未呈现结果的视图结果为空的快照。确保您的视图在屏幕更新后的快照或快照前至少呈现过一次。”通知虽然 – user3550275 2014-11-20 19:13:14
当你进入前景或背景时,你会得到什么 – Vig 2014-11-20 19:32:10
当我进入背景 – user3550275 2014-11-20 19:51:48
当应用程序处于后台时,用户可以将系统时间调整到较早。将应用重新打开时将存储时间与当前系统时间进行比较可能并不可靠。
我们可以使用NSTimer + BackgroundTask来确保流逝的时间。
在applicationWillResignActive:delegate中,设置后台任务和NSTimer。
当定时器启动(即在120秒)时,设置会话过期,并结束后台任务。
当应用程序重新打开时,在applicationDidBecomeActive:delegate中,如果请求登录过期,请检查该会话。
static BOOL sessionActive;
static NSTimer *timer;
static UIBackgroundTaskIdentifier bgTask;
- (void)applicationWillResignActive:(UIApplication *)application
{
sessionActive = YES;
timer = [NSTimer scheduledTimerWithTimeInterval:120.0 target:self selector:@selector(sessionExpired) userInfo:nil repeats:NO];
bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{[self sessionExpired];}];
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[self cleanup];
if(!sessionActive)
{
//session expired, request login credentials
}
}
-(void)sessionExpired
{
[self cleanup];
sessionActive = NO;
}
-(void)cleanup
{
if([timer isValid]) [timer invalidate];
timer = nil;
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
}
好点,我根据你对时钟变化的关注更新了我的答案 – Vig 2014-11-20 19:31:03
- 1. Android - 当应用程序离开时返回到主要活动
- 2. 在离开并返回到活动后使用计时器onTick更新TextView
- 3. Ionic2在浏览器上运行以导航离开应用程序并返回
- 4. 保留计时器的值,我离开并回到片段
- 5. 意图打开GPS并返回到应用程序
- 6. 当用户离开iOS应用程序时显示Uiview
- 7. 返回上一个应用程序iOS
- 8. 距离计算器应用程序
- 9. iOS:无需离开应用程序即可连接到Facebook
- 10. 的iOS倒计时,应用徽章数量,并节省了时间离开
- 11. 离开导航控制器,并返回到标签栏视图
- 12. 返回到应用程序时返回空指针异常
- 13. 打开另一个应用中,应用程序,然后关闭并返回到调用应用程序
- 14. PEM_read_RSA_PUBKEY返回并中断应用程序
- 15. Phonegap如何回到应用程序屏幕并退出应用程序iOS
- 16. 当用户离开应用程序时,如何清除栈回到根活动?
- 17. 如何从我的应用程序使用IOS默认日历并再次返回到我的应用程序
- 18. Facebook应用程序错误,当离开“本机ios应用程序”字段空
- 19. 计时器应用程序工作时,屏幕关闭ios
- 20. iOS 4应用程序在从后台模式返回时闪烁并崩溃
- 21. ios应用程序设计
- 22. iOS和Android的webview:如何关闭webview并返回到应用程序?
- 23. Twitter与Twitter应用程序共享并返回到我的应用程序
- 24. Unity Facebook SDK IOS不返回到应用程序
- 25. Facebook的iOS SDK不返回到我的应用程序
- 26. 从iOS应用程序上传视频到YouTube将返回400
- 27. 如何在应用程序中继续从定时状态返回计时器
- 28. 当我离开应用程序时没有收到GCM消息
- 29. 从应用程序返回应用程序时获取黑屏
- 30. Android Studio:开始倒数计时器时应用程序崩溃
为什么当你可以存储应用程序切换到后台和前台时的时间比较存储的NSDate和电流的NSDate之间的间隔定时器。如果大于阈值,则将用户注销。 – Vig 2014-11-20 17:36:56
这听起来像是一个更好的解决方案!有关在AppDelegate中如何查找信息的任何建议? – user3550275 2014-11-20 18:19:13