我有一個UILabel,我想更新爲倒數計時器。目前我正在使用NSTimer在分配的非活動時間已過時執行方法。我找到了從this SO thread設置所需的NSTimer的代碼。我使用Chris Miles在應用程序的一個視圖控制器中發佈的示例代碼,當空閒時間達到kMaxIdleTimeSeconds
時方法正常執行。根據NSTimer更新UILabel
但是我希望通過更新視圖控制器中的UILabel和剩餘的空閒時間,讓Chris Miles發佈代碼示例。我應該使用一個完全獨立的NSTimer來做到這一點,或者有什麼方法可以在註銷之前以當前NSTimer剩餘的空閒時間更新UILabel?
該應用程序的視圖控制器實現文件看起來像下面
#import "ViewControllerCreate.h"
#import "math.h"
@interface ViewControllerHome()
#define kMaxIdleTimeSeconds 20.0
@implementation ViewControllerHome
@end
- (void)viewDidLoad
{
// 5AUG13 - idle time logout
[self resetIdleTimer];
int idleTimerTime_int;
idleTimerTime_int = (int)roundf(kMaxIdleTimeSeconds);
_idleTimerTime.text = [NSString stringWithFormat:@"%d secs til",idleTimerTime_int];
}
- (void)viewDidUnload
{
[self setIdleTimerTime:nil];
// set the idleTimer to nil so the idleTimer doesn't tick away on the welcome screen.
idleTimer = nil;
[super viewDidUnload];
}
#pragma mark -
#pragma mark Handling idle timeout
- (void)resetIdleTimer {
if (!idleTimer) {
idleTimer = [NSTimer scheduledTimerWithTimeInterval:kMaxIdleTimeSeconds
target:self
selector:@selector(idleTimerExceeded)
userInfo:nil
repeats:YES];
}
else {
if(fabs([idleTimer.fireDate timeIntervalSinceNow]) < kMaxIdleTimeSeconds-1.0) {
[idleTimer setFireDate:[NSDate dateWithTimeIntervalSinceNow:kMaxIdleTimeSeconds]];
}
}
}
- (void)idleTimerExceeded {
NSLog(@"lets see what happens");
[idleTimer invalidate];
[self logout:nil];
[self resetIdleTimer];
}
// method is fired when user touches screen.
- (UIResponder *)nextResponder {
[self resetIdleTimer];
return [super nextResponder];
}
@end
我只是回答了這個最近: http://stackoverflow.com/a/17414593/210171 – nielsbot