0

このサイトで見つけた例を常に計算しようとしましたが、どういうわけか毎回値として 0 を取得しています。私はIOSが初めてで、NSDateは私にお金をかけてくれています:)

ボタン「startStop」を押したときに時間Aを記録し、もう一度押したときに時間Bを記録したい。もう一度押す (選択を解除する) と、これら 2 つの日付の間の経過時間を計算する必要があります。これまでのところ、私はこれを持っています:

-(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 および複数の日付/文字列オブジェクトを使用してさまざまなバリエーションを試してきましたが、これまでのところ、結果として大きな負の数またはゼロしか得られません。助けていただければ幸いです;)

よろしく、ニック

4

1 に答える 1

1

これは、start がローカル変数であるためです。ボタンが 2 回目にクリックされると、コードは if ブロックをスキップして直接 else ブロックに進み、start 変数は割り当てられたままになりますが、有用なものには初期化されません。この開始値を使用して開始時間と終了時間の差を計算する場合は、この開始値をローカル コンテキストの外に格納する必要があります。

于 2012-03-27T02:11:40.817 に答える