2012-03-23 14 views
0

iPhone用の簡単なフィットネス/トレーニングアプリを構築しています。ユーザは、ストップウオッチを含むビューコントローラにそれらを引き渡すテーブルからトレーニングセッションのタイプを選択することができる。このビューには、可変配列からデータが移入されたラベルがあります。異なる時間間隔でユーラベルテキストを変更する

私はストップウォッチを作動させることができ、初期ラベルを配列から取り込むことができますが、設定された時間間隔でラベルをどのように変更するのかは分かりません。これらの間隔は定期的なものではないので、10分、25分、45分などになる可能性があります。私はIf文でこれをやろうとしていますが、例えばタイマ== 25の場合です。私はこれが基本的な解決策だと確信していますが、私はプログラミングが初めてで、うまくいかないことがあります。

タイマーコードを次のように

- (void)updateTimer 
{ 
    NSDate *currentDate = [NSDate date]; 
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; 
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"HH:mm:ss.S"]; 
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; 
    NSString *timeString=[dateFormatter stringFromDate:timerDate]; 
    timerLabel.text = timeString; 
} 

スタートタイマー:

- (IBAction)startTimerButton:(id)sender { 

    if (timer == nil) { 
     startDate = [NSDate date]; 

     // Create the stop watch timer that fires every 0.1s 

     timer = [NSTimer scheduledTimerWithTimeInterval:1.0/10 
               target:self 
               selector:@selector(updateTimer) 
               userInfo:nil 
               repeats:YES]; 

    } 

    else { 
     return; 
    } 
} 
+0

これまでにこのコードを実行した結果はどうなりますか? –

+0

ビルドエラーがなく、ストップウォッチが正常に動作します。私はIfステートメントを実行する方法を考えることができません。私は "if(timer == 5)[nextLable; setText ...]"を試みますが、 '暗黙的にintの' NSTimer 'への変換がARCの' – pig70

+0

で禁止されています(timer.timeInterval == 5)。 NSTimerの読み込みクラスリファレンスhttps://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nstimer_Class/Reference/NSTimer.html –

答えて

0

は、私はあなたが後にしているものをあまりにもよく分かりません。時間間隔を1.0/10の代わりに10分/ 25分などに設定すると、時間のかかるコードでは、タイマーの時間間隔を知ることができます。

いつでもtimeIntervalインスタンスメソッドを使用して時間間隔を照会することができます。おそらく次のように。私はあなたのupdateTimer関数の引数としてタイマーを追加しました

- (void)updateTimer:(NSTimer*)timer 
{ 
    if ([timer timeInterval] == 10 * 60) // 10 minutes have elapsed 
    { 
     // Do something for this timer. 
    } 
    else if ([timer timeInterval] == 20 * 60) // 20 minutes have elapsed 
    { 
    } 
} 

注意してください。 scheduledTimerWithTimeIntervalメソッドで@selector(update:)(最後にコロンを付けてください)セレクタを使用する必要があります。あなたのコールバックセレクタが呼び出されると、それはタイマーに渡されます。

それとも、あなたが使用することができますあなたの「startTimerButton」で作成されたタイマーへのポインタを持っている場合に次のように第2の原因で使用すると、2つのオブジェクトへのポインタを比較していることを

- (void)updateTimer:(NSTimer*)timer 
{ 
    if (timer == myTenMinuteTimer) // 10 minutes have elapsed 
    { 
     // Do something for this timer. 
    } 
    else if (timer == myTwentyMinuteTimer) // 20 minutes have elapsed 
    { 
    } 
} 

お知らせをし、最初の2つのオブジェクトのメソッドの値を比較する場合と同様に、オブジェクトが真であると評価されるためには必ずしも同じオブジェクトへのポインタである必要はありません。

希望すると便利です。

+0

ありがとうございます。これでやってみましょう。 – pig70

関連する問題