以下の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];
}
ありがとう、サミ。
母は、ほぼ同じ回答を私はドット表記の方が好き。 :-) サイドノート:メインスレッドで実行されるタイマーですか?メインスレッドで実行する必要があると思いますが、NSTimerには必要ないようです。しかし、それがメインスレッド上で実行されている場合、どのようにしてiOSが常に「時間内」と呼ばれることを確認できますか?それとも2番目の考えでそれを保証することはできません。 – Krumelur
今は何も表示されていないし、NSTextFieldが-setTextに応答しない可能性があるエラーも出ます。また、Mac OS Xアプリではなく、iPhoneアプリであることを忘れて申し訳ありません。ラベルはUILabelではなくNSTextViewのインスタンスです。 – Sami
'これはMac OS Xアプリではなく、iPhoneアプリなので、ラベルはUILabelではなくNSTextViewのインスタンスなので、忘れました。 – Moshe