我是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 :(得分: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"];
希望这有帮助。