2016-04-01 15 views
2

Swift 2.2およびXcode 7.3にアップデートした後、繰り返すNSTimerの繰り返しが中止されました。Xcode 7.3/Swift 2.2へのアップデート後にタイマーが動作を停止しました

let timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: #selector(rotate), userInfo: nil, repeats: true) 
timer.fire() 

セレクタは一度発生し、ウィンドウが閉じられたり最小化されるまで再起動しません。

他にもありますか?助言がありますか?

+0

それは一度発射し、決して再び。申し訳ありませんが、私はそれを言ったと思った。 –

+0

まだ繰り返されません。 : –

答えて

0
dispatch_async(dispatch_get_main_queue()) { 
     self.timer = NSTimer(timeInterval:1.0, target:self, selector: #selector(self.rotate), userInfo:nil, repeats:true) 
     NSRunLoop.currentRunLoop().addTimer(self.timer!, forMode: NSRunLoopCommonModes) 
    } 

それは、スレッド問題だだけでなく、適切に自動的に追加またはNSRunLoop内で処理されていないのいずれか。同じスレッドでこれを手動で実行すると、それが修正されました。

皆様に助力と助言をいただき、ありがとうございます。

4

タイマーは常に同じスレッドでスケジュールまたは無効にする必要があります。非同期ブロック内でタイマーを呼び出すことはできますか?メインキューにスケジュールを設定してみてください。

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
    let timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: #selector(rotate), userInfo: nil, repeats: true) 
    timer.fire() 
    }) 
+0

私のviewDidLoad()で呼び出す。私は7.3に更新され、ウィンドウが閉じた後にタイマーが起動する前にそれが働いて変わったのですか? –

+0

私はプロジェクト内の単一のタイマーで同じ問題を抱えています私は作業しています... dispatch_asyncは私のためにトリックをしました... –

+0

しかし、答えはありがたいです –

1
func startTimer() { 
    let timer = NSTimer(timeInterval: 1, target: self, selector: #selector(MainViewController.updateLabel), userInfo: nil, repeats: true) 
    NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes) 
} 

これはスウィフト2.2 リンゴのドキュメントで私の作品は、dispatch_asyncについては何も言いません。なしタイマーオブジェクトを作成するクラスメソッド:呼び出し::繰り返し:またはtimerWithTimeInterval:ターゲット:セレクタ:のUserInfo:繰り返しまだ

使用timerWithTimeIntervalを学ぶだけで好奇心、それを使用する理由は... ...あり実行ループでスケジューリングする。 (それを作成した後、あなたがaddTimerを呼び出すことによって、手動で実行ループにタイマーを追加する必要がありますforMode:対応NSRunLoopオブジェクトのメソッド)

関連する問題