我需要做的是这个;我将有一个计时器,它将打开,30分钟后,我将自动注销用户。但如果与应用程序有任何交互,我会将计时器重置为30分钟。我知道该怎么做,但我确信有更好的方法可以做到这一点。
我要做的是创建一个包含计时器的单例类,并在计时器启动时发布通知。所以我想的是,当用户按下按钮,进入下一个屏幕等时,我将不得不重置计时器。
我的问题是,是否可以在一段代码中回复应用程序中的任何触摸?就像某种程度上有一个超类我可以添加它,它将始终重置计时器,无论发生什么样的交互?或者我是否需要将代码添加到用户将与应用程序交互的所有位置?
答案 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分钟内触摸屏幕,取消之前的请求并注册新请求。