从另一个标签切换回来后,秒表搞砸了

时间:2012-12-31 05:52:34

标签: objective-c uitabbarcontroller nsdate nstimer uitabbar

我有一个单独工作的秒表,但是当我从标签栏的另一个视图切换回来时,秒表会做一些奇怪的事情(点击导航视图上的后退按钮工作正常)。

  1. 当用户从另一个标签切换回来时,秒表标签会被隐藏,即使在显示视图时它应该是可见的。

  2. 如果秒表正在运行,当用户点击另一个标签并再次点击秒表标签时,秒表会转到-31:-23.-64,并且停止按钮(应重置定时器)并且显示开始按钮)在点击时不会做任何事情。

  3. 如果用户点击另一个标签并再次点击秒表标签时秒表未运行,则秒表将正常启动,但当用户点击开始按钮时停止按钮不会显示。 / p>

  4. 这是我的代码:

    ·H:

    @interface ViewController : UIViewController {
        IBOutlet UIButton *btnStart;
        IBOutlet UIButton *btnStop;
        IBOutlet UILabel *lblTimer;
        NSTimer *stopWatchTimer;
        NSDate *stopDate;
        NSDate *startDate;
    
    }
    
    @property (strong, nonatomic) IBOutlet UILabel *lblTimer;
    
    - (IBAction)btnStart:(id)sender;
    - (IBAction)btnStop:(id)sender;
    

    的.m:

    - (void)updateTimer
    {
        NSDate *currentDate = [NSDate date];
        NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
        NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"mm:ss.SS"];
        [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
        NSString *timeString=[dateFormatter stringFromDate:timerDate];
        lblTimer.text = timeString;
    }
    
    - (IBAction)buttonStart:(id)sender {
    
        startDate = [NSDate date];
    
        // Create the stop watch timer that fires every 1ms
        stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/100.0
                                                          target:self
                                                        selector:@selector(updateTimer)
                                                        userInfo:nil
                                                         repeats:YES];
        btnStop.hidden = NO;
        btnStart.hidden = YES;
    }
    
    - (IBAction)buttonStop:(id)sender {
    
        [self updateTimer];
        btnStop.hidden = YES;
        btnStart.hidden = NO;
    
        [stopWatchTimer invalidate];
        stopWatchTimer = nil;
    }
    

    请让我知道如何解决此问题,或者是否需要其他任何内容。

1 个答案:

答案 0 :(得分:1)

首先,看起来startDate搞砸了。正在调用init。它应该只是[NSDate date]

对于未显示的视图...在计算日期后,timer.text被设置为某种东西。什么是计时器?你确定不应该timer.title吗?在您这样做之后,您可能需要[timer setNeedsDisplay]以确保文本在控件上更新,如果这是您想要的。

如果文本仍然混乱,请尝试更新频率。也许每十分钟一次,看看文本是否表现得更好。