IOS计时器应用程序

时间:2014-08-06 11:27:59

标签: ios objective-c

我在IOS中有一个像计时器这样的应用程序。在第一个屏幕上我有按钮,当我点击它时计时器启动,经过一段时间说30秒我运行我的应用程序然后我停止我的应用程序(不在后台),我终止应用程序。在计时器显示1分钟后我重新打开我的应用程序,这工作正常,但是当我更改设备系统时间时,计时器显示不同的时间。

NSTimeInterval oldTimeInterval = [[NSUserDefaults standardUserDefaults] doubleForKey:PunchInTimeWhenGoneBackgroundKEY];
        NSTimeInterval currentTimeInterval = [[NSDate date] timeIntervalSince1970];


    //if(currentTimeInterval>oldTimeInterval)
    //{}

    WORKING_TIME = WORKING_TIME + (currentTimeInterval - oldTimeInterval) + 1;

    if(timerWorkTime!=nil)
    {
        [timerWorkTime invalidate];
        timerWorkTime = nil;
    }

    timerWorkTime = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(funCalculateWorkingTime) userInfo:nil repeats:YES];

-(void)funCalculateWorkingTime
{

WORKING_TIME++;

workingHour   = (int) WORKING_TIME / 3600;
WorkingMin    = (int) WORKING_TIME / 60;
WorkingSecond = (int) WORKING_TIME % 60;

lblWorkingTime.text = [NSString stringWithFormat:@"%.2d : %.2d : %.2d",workingHour,WorkingMin,WorkingSecond];

earnedMoney = ((float)WORKING_TIME * HOURLY_RATE)/3600.0;
lblTotalEarned.text = [NSString stringWithFormat:@"$%.2f",earnedMoney];

   // NSLog(@"time : %@",lblWorkingTime.text);
}

请帮帮我。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

我不知道如何在不使用服务器提供计时器功能的情况下纠正此问题。

如果应用程序无法在后台运行,即使应用程序未运行,您设置为保存和检查的任何计时器都将依赖于本地设备的系统时间。对系统时间的任何改变都会搞砸了。

我唯一的想法是创建一个非常简单的服务器组件,您可以在该站点上注册计时器,然后在启动时检查服务器以查看可用的计时器以及剩余时间。

编辑:您可以使用一个选项,但这不是万无一失的。您可以使用CACurrentMediaTime()获取相对于启动时间的时间。如果用户更改时区,或手动更改系统日期,则不会受到影响。它仍然是相对于上一次系统启动。不好的一面是,如果用户重新启动手机,它将会丢弃所有计时器。

答案 1 :(得分:0)

请勿使用系统时间进行测量。使用UserDefaults或您自己的属性列表存储时差。