2011-02-03 12 views
1

少し助けが必要です。私は50などの値を取得するメソッドを持っています。その値をtrackDurationに代入するので、NSNumber * trackDuration = 50このメソッドは、trackDurationの値から1秒ごとに1を引いて、ラベルを更新します。ラベルはdurationと呼ばれます。Objective-c 1秒に1回カウントする方法

これまで私がこれまで持っていたことは次のとおりです。

- (void) countDown { 
iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"]; 

NSNumber *trackDuration = [NSNumber numberWithDouble:[[iTunes currentTrack] duration]]; 
while (trackDuration > 0) { 
    trackDuration - 1; 
    int inputSeconds = [trackDuration intValue]; 
    int hours = inputSeconds/3600; 
    int minutes = (inputSeconds - hours * 3600)/60; 
    int seconds = inputSeconds - hours * 3600 - minutes * 60; 
    NSString *trackDurationString = [NSString stringWithFormat:@"%.2d:%.2d:%.2d", hours, minutes, seconds]; 
    [duration setStringValue:trackDurationString]; 
    sleep(1); 
}} 

先進的なサミのおかげで、何か助けていただければ幸いです。

答えて

2

これであるべきことは常に50

trackDuration -1; 

のままですので、メインスレッドをブロックします、そしてあなたが値trackDurationを代入されていません。

trackDuration--; // or trackDuration -= 1; 

また、私はこのようにそれを行うだろう:

- (void)startCountDown 
{ 
    [NSTimer scheduledTimerWithInterval:1.0f target:self selector:@selector(timerHit:) userInfo:nil repeats:YES]; 
} 
- (void)timerHit:(NSTimer *)p_timer 
{ 
    if(trackDuration <= 1 && [p_timer isValid]) 
    [p_timer invalidate]; 
// track duration is an instance variable 
trackDuration--; 
// update LABEL 
} 

のiOS 2.xまたは高いがNSTimer

のために必要です
+0

iPhone OS 2は、サードパーティのアプリケーションをサポートしている最初のデバイスであり、とにかくMacのプログラムであることは間違いありません(SBApplicationを使用していることが明らかです)。 – Chuck

+0

助けてくれてありがとう、もっと理にかなっていますが、私はフォローウィングの警告を受け取り、それはうまくいきません。 NSTimer 'が' scheduledTimerWithInterval: 'に応答しない可能性があります。target:selector:userInfo:repeats:' – Sami

+0

このメソッド呼び出しの最初の部分は:scheduledTimerWithTimeInterval: –

0

このメソッドをループで実行すると、アプリが実行中に反応しなくなります。UIの更新は表示されません。代わりに、1秒の間隔でNSTimerを使用し、タイマーが起動したときの経過時間を更新する必要があります。

関連する問題