2012-03-27 100 views
0

我已经试过所有的时间计算例子,我发现在这个网站上,但不知何故我每次都得到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以及多个日期/字符串对象的众多变体,但是到目前为止,我只得到大的负数或只是结果为零。感谢任何帮助;)

映入眼帘,尼克

回答

1

这是因为开始是一个局部变量。当第二次点击按钮时,你的代码将跳过if块并直接进入else块,保留已分配的启动变量但未初始化为任何有用的值。如果要使用它来计算开始和停止时间之间的差异,则需要将此起始值存储在本地上下文之外。

+0

Aarhhhg ofcourse!我十分关注那一块代码,我完全忘记了它在其中!我的断点告诉我他们有相同的约会,但是我首先寻找最困难的可能性,而不是逻辑的可能性......感谢您的快速反应;) – BossBols 2012-03-27 18:51:02

+0

没问题,我知道那种感觉。介意接受答案是否正确? – tronbabylove 2012-03-27 19:25:00

+0

是的,当然!接受;) – BossBols 2012-03-27 19:55:14