Рассчитать время, прошедшее между нажатием одной и той же кнопки дважды - PullRequest
0 голосов
/ 27 марта 2012

Я все время пробовал вычислять примеры, которые нашел на этом сайте, но почему-то каждый раз получаю 0 в качестве значения.Я новичок в IOS, и NSDate дает мне пробежку за свои деньги:)

Я хочу записать время A, когда я нажимаю кнопку «startStop», а затем записать время B, когда я нажимаю его снова.Повторное нажатие (отмена выбора) должно подсчитать время, прошедшее между этими двумя датами.Пока у меня есть это:

-(IBAction)buttonClick {


    NSDate *startStopDate =  [NSDate alloc];

    NSDateFormatter *formatter= [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"hh:mm:ss"];

    NSString *currentTime = [[NSString alloc] init];
    NSString *currentTime2 = [[NSString alloc]init];


    NSDate *start =[ [NSDate alloc]init];
    NSDate *stop = [[NSDate alloc] init];

    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    if (startStop.selected==NO) {

        NSLog(@"started");
        [startStop setSelected:YES];

        startStopDate = [NSDate date];


        currentTime = [formatter stringFromDate:startStopDate];

        NSLog(@"Current timestarted is %@",currentTime);


        startTime.text = currentTime;

        start = [formatter dateFromString:currentTime];


    }

    else {


        NSLog(@"Selected");
        [startStop setSelected:NO];

        startStopDate = [NSDate date];

        currentTime2 = [formatter stringFromDate:startStopDate];


        NSLog(@"Current time is %@",currentTime2);

        stopTime.text = currentTime2;
        stop = [formatter dateFromString:currentTime2];


        NSUInteger unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

        NSDateComponents *components = [gregorianCalendar components:unitFlags
                                                            fromDate:start
                                                              toDate:stop
                                                             options:0];



        NSInteger hours = [components hour];
        NSInteger minutes = [components minute];
        NSInteger seconds = [components second];


        NSLog(@"hello %d, %d, %d", hours, minutes, seconds);

    }
}

Мои ярлыки дают правильный час: минутный вывод при нажатии, но я не могу заставить их перейти к вычислению даты.Я пробовал многочисленные варианты с dateFromString и stringFromDate и несколькими объектами date / string, как вы можете видеть, но пока я получаю только большие отрицательные числа или просто ноль в результате.Любая помощь приветствуется;)

Привет, Ник

1 Ответ

1 голос
/ 27 марта 2012

Это потому, что start является локальной переменной. При повторном нажатии кнопки ваш код пропустит блок if и перейдет прямо к блоку else, оставив начальную переменную выделенной, но не инициализированной для чего-либо полезного. Вам необходимо сохранить это начальное значение вне локального контекста, если вы хотите использовать его для вычисления разницы между временем начала и окончания.

...