[英]Pause NSTimer when leaving that view and continue counting when come back?
我是xcode和Objective-c的新手,正在尝试开发一个应用程序。 我想在某些页面中设置一个计时器,以计算用户在该页面中花费的时间。 在该应用程序中,我有5个主题页面,每个页面包含另一个3个子页面的表格视图。 我想为这3个页面(5 * 3)添加一个计数器,但不包括主题页面本身。 页面切换由导航栏控制。 我在viewcontroller的.m文件中放置了一些代码,如下所示。
- (void)viewDidLoad
{
[super viewDidLoad];
//timer
timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self
selector:@selector(handleTimer)
userInfo:nil
repeats:YES];
}
-(void)handleTimer
{
MainInt += 1;
self.TimeLabel.text = [NSString stringWithFormat:@"%d",MainInt];
}
以及.h文件中的一些代码(Brett是3个子页面之一。)
@interface Brett : UIviewController
{
NSTimer *timer;
int MainInt;
}
@ property (weak, nonatomic) IBOutlet UILable *TimLable;
每当我离开页面并再次返回时,计数器始终从0开始计数。任何人都可以帮助解决此问题?
每当它计数从0开始时,我猜是因为每次将其推入导航时都在创建Brett对象。
在appDelegate类中创建全局计时器,并在viewWillAppear
启动计时器和viewWillDisappear
暂停该计时器并使用它。
替代其他答案,您只需将MainInt
静态变量
static int MainInt;
从您的问题中我了解到的是,只需跟踪用户在子页面上花费的时间即可。 如果我的理解是正确的,那么您可以尝试以下方法。
像现在一样创建并启动计时器。 在控制器的viewWillDisAppear
方法上,只需更新全局变量或NSUserDefaults
值,如下所示:
//Get the previous time available in userdefaults
int counter = [[NSUserDefaults standardUserDefaults] integerForKey:@"ScreenACounter"];
//Update the key with existing counter value + current timer value.
[[NSUserDefaults standardUserDefaults] setInteger:counter + currentTimer.Value forKey:@"HighScore"];
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.