2015-09-16 52 views
0

我需要做的是这个;我将有一个计时器,将打勾,当30分钟后,我会自动注销用户。但是如果与应用程序有任何交互,我会将计时器重置为30分钟。我对做什么有一个想法,但我相信有更好的方法来实现这一点。在应用程序中自动注销计时器?

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

我的问题是,是否可以响应应用程序中的任何触摸一块代码?就像某种方式,我可以添加一个超类,无论发生什么样的交互,它总会重置定时器。还是我需要将代码添加到用户将与应用程序进行交互的所有位置?

回答

1

你可以试试这个,子类UIApplication和实施main.m更改添加以下代码

@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 

则实现这样

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

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

+0

谢谢生病,当我有时间试试这个。仍在研究别的东西。它看起来正是我所需要的。因此,如果我查看'''UIApplication''类,我应该看到一个名为'' - - void(void)senEvent)'''每当应用程序中发生事件时调用它。我想知道该方法将被调用的事件的范围以及该方法如何与系统进行交互 – Esko918

+0

此事件与其余应用程序的交互是在ui应用程序类中处理的。这就是为什么我们调用超级方法。如果你评论超级通话什么都不会发生我猜(不检查这种情况) – Johnykutty

+0

谢谢你,我刚刚实现了这个现在它的工作原理 – Esko918