繁体   English   中英

离开该视图时暂停NSTimer并在返回时继续计数吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM