2

こんにちは、iPhoneアプリで12:00分から0:00までカウントするタイマーがあります! しかし、開始すると、次のようにカウントされます。11:58 11:56 11:54 11:52

ティックごとに2秒をカウントしています。

これは、スタート ボタン コードのコードです。

tid.text=[NSString stringWithFormat:@"%d:%.2d",minuter,sekunder];
timer= [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tidklick) userInfo:nil repeats:YES];

これはtidklickメソッドです:

-(void) tidklick
{

tiden -= 1;
sekunder = tiden % 60;
minuter= (tiden - sekunder) / 60;
tid.text=[NSString stringWithFormat:@"%d:%.2d",minuter,sekunder];

}

これは冒頭のコードです..

 int tiden=720;
 int sekunder;
 int minuter;

これは、メソッドに入れた NSLog に表示されます...

2012-04-26 06:41:38.562 Matte [288:f803] tiden: 719
sekunder: 59
 2012-04-26 06:41:38.607 Matte [288:f803] tiden: 718
 sekunder: 58
 2012-04-26 06:41:39.562 Matte[288:f803] tiden: 717
 sekunder: 57
 2012-04-26 06:41:39.607 Matte[288:f803] tiden: 716
  sekunder: 56
 2012-04-26 06:41:40.562 Matte [288:f803] tiden: 715
 sekunder: 55
 2012-04-26 06:41:40.607 Matte [288:f803] tiden: 714
 sekunder: 54

新しい名前と新しいメソッドで新しいタイマーを作成しようとしましたが、それでもカウントは 2 です。 画面にボタンや物がたくさんあるという事実と何か関係があるのでしょうか? 何かの記憶違い?

前もって感謝します!

4

3 に答える 3

5

あなたのロジックは問題ないようです。タイマーを 2 回作成していませんか?

于 2012-04-25T15:27:30.223 に答える
2

コードに問題はありません。最初にログを記録してみてください

次に、2秒ごとにカウントするか、2秒ごとにUIを更新するかがわかります

-(void) tidklick
{

tiden -= 1;
sekunder = tiden % 60;
// add log here
NSLog(@"tiden: %d\n sekunder: %d",tiden,sekunder);

minuter= (tiden - sekunder) / 60;
tid.text=[NSString stringWithFormat:@"%d:%.2d",minuter,sekunder];

}

そして、バックグラウンドスレッドでタイマーを実行することができます

[self performSelectorInBackground:@selector(schedule) withObject:nil];

- (void) schedule {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSRunLoop* runLoop = [NSRunLoop currentRunLoop];

timer = [[NSTimer scheduledTimerWithTimeInterval:1.0f
                                              target:self
                                    selector:@selector(run:)
                                    userInfo:nil
                                     repeats:YES]
     retain];

[runLoop run];
[pool release];
}


-(void) run:(id) sender{

// you should handle the thread-safe 
tiden -= 1;
sekunder = tiden % 60;
// add log here
NSLog(@"tiden: %d\n sekunder: %d",tiden,sekunder);
minuter= (tiden - sekunder) / 60;
NSString *test =[NSString stringWithFormat:@"%d:%.2d",minuter,sekunder];

[label performSelectorOnMainThread:@selector(setText:) withObject:test waitUntilDone:YES];
}
于 2012-04-25T18:13:45.210 に答える
1

xcodeから実行すると、処理が非常に遅くなることがあります。前に述べたように、ロジックは正常に見えます。電話で実行してみることができますが、xcodeからは実行できません。これはシミュレータでも機能する可能性があります。しかし、それについてはよくわかりません。

于 2012-04-25T15:44:39.623 に答える