вы не установили startDate
Ваш код должен выглядеть следующим образом (я предполагаю, что это ARC):
- (IBAction)startButtonTapped:(id)sender {
startDate = [NSDate date];
stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(updateTimer)
userInfo:nil
repeats:YES];
}
, а updateTimer - это нелепо сложный способ делить секунды на минуты и секунды. Пройдите базовую математику.
- (void)updateTimer
{
NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
NSInteger minutes = floor(timeInterval/60);
NSInteger seconds = trunc(timeInterval - minutes * 60);
NSString *timeString=[NSString stringWithFormat:@"%i:%02i", minutes, seconds];
stopWatchLabel.text = timeString;
}
РЕДАКТИРОВАТЬ: На самом деле вы должны использовать встроенный API NSCalendar / NSDateComponents, потому что он не игнорирует летнее время, как основной математический метод.
- (void)updateTimer
{
NSDate *currentDate = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSSecondCalendarUnit|NSMinuteCalendarUnit fromDate:startDate toDate:currentDate options:0];
NSInteger minutes = [components minute];
NSInteger seconds = [components second];
NSString *timeString=[NSString stringWithFormat:@"%i:%02i", minutes, seconds];
stopWatchLabel.text = timeString;
}