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

时间:2014-02-03 08:30:56

标签: ios iphone xcode nstimer

我是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开始计算。任何人都可以帮助解决这个问题?

3 个答案:

答案 0 :(得分:3)

每次计数从0开始,我想因为你每次将它推到导航时都会创建 Brett 对象。

在appDelegate类中创建全局计时器并使用它, 在viewWillAppear 开始计时器和viewWillDisappear 暂停该计时器。

答案 1 :(得分:1)

替代其他答案,您可以将MainInt设为静态变量

static int MainInt; 

答案 2 :(得分:1)

我从您的问题中理解的是简单地跟踪用户在子页面中花费的时间。如果我的理解是正确的,那么你可以试着跟随。

像现在一样创建和启动计时器。 在控制器的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"];

希望这有帮助。