2015-09-16 64 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