应用中的自动退出计时器?

时间:2015-09-16 01:32:15

标签: ios nstimer touchesbegan touches

我需要做的是这个;我将有一个计时器,它将打开,30分钟后,我将自动注销用户。但如果与应用程序有任何交互,我会将计时器重置为30分钟。我知道该怎么做,但我确信有更好的方法可以做到这一点。

我要做的是创建一个包含计时器的单例类,并在计时器启动时发布通知。所以我想的是,当用户按下按钮,进入下一个屏幕等时,我将不得不重置计时器。

我的问题是,是否可以在一段代码中回复应用程序中的任何触摸?就像某种程度上有一个超类我可以添加它,它将始终重置计时器,无论发生什么样的交互?或者我是否需要将代码添加到用户将与应用程序交互的所有位置?

1 个答案:

答案 0 :(得分:1)

您可以尝试此操作,子类UIApplication并在实现中添加以下代码

@implementation MyApplication

- (instancetype)init {
    self = [super init];
    if (self) {
        [self reset];
    }
    return self;
}

- (void)reset {
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(logout) object:nil];
    [self performSelector:@selector(logout) withObject:nil afterDelay:30*60];
}

- (void)sendEvent:(UIEvent *)event {
    [super sendEvent:event];

    [self reset];
    NSLog(@"event detected");
}

- (void)logout {
    NSLog(@"logout now");
}
@end

然后在main.m中更改此实现

return UIApplicationMain(argc, argv, NSStringFromClass([MyApplication class]), NSStringFromClass([AppDelegate class]));

这里发生的事情是,- (void)sendEvent:(UIEvent *)event方法将在每次用户活动后被调用,然后我们在30分钟后注册执行选择器请求。一旦用户在30分钟内触摸屏幕,取消之前的请求并注册新请求。