2012-03-27 5 views
0

Ich habe die ganze Zeit versucht, Beispiele zu berechnen, die ich auf dieser Seite gefunden habe, aber irgendwie bekomme ich jedesmal 0 als Wert. Ich bin neu in IOS und das NSDate gibt mir einen Lauf für sein Geld :)Berechne die verstrichene Zeit zwischen zweimaligem Drücken der gleichen Taste

Ich möchte die Zeit A, wenn ich die Taste "startStop", und dann die Zeit B, wenn ich es erneut drücken. Wenn Sie ein zweites Mal drücken (Abwahl), muss die Zeit zwischen diesen beiden Daten berechnet werden. Bisher habe ich dies:

-(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); 

    } 
} 

Meine Etiketten geben die richtige Stunde: Minute ausgegeben, wenn gedrückt, aber ich kann nicht scheinen, um sie zu dem Zeitpunkt Berechnung zu übertragen. Ich habe versucht, zahlreiche Variationen mit dateFromString und stringFromDate und mehreren Datum/String-Objekten, wie Sie sehen können, aber bisher habe ich nur große negative Zahlen oder nur Null als Ergebnis. Jede Hilfe dankbar;)

Greets, Nick

Antwort

1

Das ist, weil Beginn eine lokale Variable ist. Wenn die Taste das zweite Mal angeklickt wird, überspringt Ihr Code den if-Block und geht direkt zum else-Block, wobei die Startvariable zwar zugewiesen, aber nicht initialisiert wird. Sie müssen diesen Startwert außerhalb eines lokalen Kontexts speichern, wenn Sie den Unterschied zwischen Start- und Stoppzeit berechnen möchten.

+0

Aarhhhg natürlich! Ich war so auf diesen einen Block Code fixiert, dass ich komplett vergessen hatte, dass ich dabei war! Mein Haltepunkt zeigte mir, dass sie das selbe Datum hatten, aber stattdessen suchte ich zuerst nach den schwierigsten Möglichkeiten, nicht nach den logischen ... Danke für die schnelle Antwort;) – BossBols

+0

Kein Problem, ich kenne dieses Gefühl. Verstand, die Antwort als richtig anzunehmen? – tronbabylove

+0

Ja, natürlich! Akzeptiert;) – BossBols