iPhone - 获取用户交互事件和自动注销

时间:2011-09-23 14:20:43

标签: iphone objective-c cocoa-touch

在我的iPhone应用程序中,如果在2分钟左右没有任何反应(例如用户放下手机),我想要注销用户。有没有人有这样的问题?实现此功能的最佳方法是什么?我想我将最后一个事件的日期保存到NSUserDefaults,然后在下一个事件中首先检查当前日期。如果差异大于2分钟,请转到登录屏幕,否则刷新存储的日期。但是我怎样才能获得触摸事件呢?

谢谢,madik

2 个答案:

答案 0 :(得分:1)

UIApplicationDelegate中有一个方法:

- (void)applicationWillResignActive:(UIApplication *)application
{
/*
 Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
 Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
 */
}

请注意,当应用进入后台状态时也会调用它。这将有助于您在应用程序进入非活动状态时存储数据。如果您想检查是否已经过了一定的时间,则必须使用NSTimer并存储最后一次触摸事件。我认为它无法完成,因为你无法拦截所有的触摸事件(可能它是在系统管理的对象上。状态栏就是一个例子)。我想最好让系统管理所有活动/不活动的东西,并在必要时存储你的数据。

<击>

编辑:我第一次不明白你的意思。检查此accepted answer,它可以满足您的需求。基本上你必须继承UIApplication并覆盖sendEvent方法。

答案 1 :(得分:0)

'的NSTimer'

当你说“我怎么能得到一般的触摸事件?”时,如果你的意思是如何判断用户是否空闲,你必须设置一些系统来收集更高的所有触摸事件您应用中的级别。您可以更新NSUserDefaults中提到的最后一次触摸时间,但在应用程序运行期间这可能效率低下,因此您可以将触摸事件发布到主应用代表并让它节省上次触摸的时间。这也是您可以设置2分钟计时器的地方。

类似的东西:

- (void) someAppDelegateMethodThatYouCallForAnyUserEvent
{
    [self.idleTimer invalidate];
    self.lastEvent = [NSDate now];
    self.idleTimer = [NSTimer scheduledTimerWithTimeInterval:120 target:self selector:@selector(logoutAndGotoLogin) userInfo:nil repeats:NO];
...
}

如果您支持该行为,当应用程序转到后台等时,您还必须在应用委托方法中进行一些清理。