2017-01-08 3 views
-1

私のアプリにバックグラウンドプロセスがあります。コードは次のとおりです。ios9のバックグラウンドタイマー

@available(iOS 10.0, *) 
func startTimer() { 
    timer2?.invalidate() 
    timer2 = Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true, block: { (t) in 
     if UIApplication.shared.applicationState == .background { 
      NSLog("tic background \(UIApplication.shared.backgroundTimeRemaining)") 

      if UIApplication.shared.backgroundTimeRemaining < 10 { 

      } 

     } 

    }) 
    timer2?.fire() 
} 

ただし、iOS10でのみ動作します。以前のバージョンのiOS用に書き直す方法はありますか?

+1

iOS9での問題は何ですか? – shallowThought

+0

'scheduledTimer(withTimerInterva:repeatedats:ブロック)'はios 10以降でのみ利用可能です –

+0

をご覧ください。 http://stackoverflow.com/a/24007862/1457385 – shallowThought

答えて

2

ios9以下のブロックベースのタイマーAPIはありません。

ブロックの代わりにコールバックとしてメソッドを使用するか、またはたとえばブロックのような第三者のソリューションを使用します。 BlocksKit

Idはメソッドで行く(何百もあります):

func startTimer() { 
    timer2?.invalidate() 
    timer2 = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(ViewController.timerFired(_:)), userInfo: nil, repeats: true) 
    timer2?.fire() 
} 

@objc 
func timerFired(_ timer: Timer) { 
    NSLog("tic") 

    if UIApplication.shared.applicationState == .background { 
     NSLog("tic background \(UIApplication.shared.backgroundTimeRemaining)") 

     if UIApplication.shared.backgroundTimeRemaining < 10 { 

     } 

    } 
} 
+0

こんにちは、もう一度。答えてくれてありがとう。これは適切な解決策であると感じています。しかし、私はコールバックで作業コードを書くことはできません。あなたは私の特定の事件の詳細を教えてくれますか?ありがとう –

+0

こんにちはアントン。それを編集しました。サンプルを追加 –

+0

大きな感謝!私はそれを機能させるために苦労してきました。あなたはちょうど私に解決策をくれました! #selectorでこの部分の意味(_ :)を聞かせてもよろしいですか? –

関連する問題