2011-02-08 24 views
1

以下の2つの方法があります。 1つの方法(timerHit)は、現在再生中の曲のトラック時間を取得し、その中から1を減算し、ログに記録します。毎秒2回繰り返すもう1つの方法(countDown)はtimerHitメソッドを呼び出しますが、正しく動作していないようですが、NSLogステートメントが動作し、毎秒値を出力しますが、更新ラベルステートメント[duration setDoubleValue:trackDuration];は機能しません。誰でも助けてくれますか?Objective-C NSTimer更新ラベルが更新されない

- (void)countDown { 
    [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(timerHit:) userInfo:nil repeats:YES]; 
} 

- (void)timerHit:(NSTimer *)p_timer 
{ 
    iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"]; 
    double trackDuration = [[iTunes currentTrack] duration]; 
    if(trackDuration <= 1 && [p_timer isValid]) 
     [p_timer invalidate]; 
    trackDuration--; 
    NSLog(@"%d", trackDuration); 
    [duration setDoubleValue:trackDuration]; 
} 

ありがとう、サミ。

答えて

0

持続時間はNSTextFieldのインスタンスであると仮定します(Googleの検索の後、これがそうであるようです - NSLabelを既存のオブジェクトとして見つけることができません)。

[duration setStringValue:[NSString stringWithFormat:@"%d", trackDuration]]; 
+0

母は、ほぼ同じ回答を私はドット表記の方が好き。 :-) サイドノート:メインスレッドで実行されるタイマーですか?メインスレッドで実行する必要があると思いますが、NSTimerには必要ないようです。しかし、それがメインスレッド上で実行されている場合、どのようにしてiOSが常に「時間内」と呼ばれることを確認できますか?それとも2番目の考えでそれを保証することはできません。 – Krumelur

+0

今は何も表示されていないし、NSTextFieldが-setTextに応答しない可能性があるエラーも出ます。また、Mac OS Xアプリではなく、iPhoneアプリであることを忘れて申し訳ありません。ラベルはUILabelではなくNSTextViewのインスタンスです。 – Sami

+0

'これはMac OS Xアプリではなく、iPhoneアプリなので、ラベルはUILabelではなくNSTextViewのインスタンスなので、忘れました。 – Moshe

0

あなたがラベルのテキストを設定する必要があります。

duration.text = [NSString stringWithFormat:@"%d", trackDuration]]; 
+0

Macでは、iOSではないので、 ' - [NSTextField setStringValue:]'ではなく、 - [UILabel setText:] 'ではありません。 –