我是新手在iOS/Swift中。我嘗試了很多Q &至於在stackoverflow.com上,但還沒有找到解決方案。Swift 3.0:定時器不能在第一時間工作
有沒有人解釋我爲什麼我的計時器不能在第一時間(*)工作,但第二次正常工作。 (*)第一次:運行應用程序到我的iPhone(5S),在應用程序完成啓動後,單擊主頁以轉到後臺,間隔時間後,startSendDataSchedule被調用但未完成且後臺結束。此處停止的應用程序 過了幾秒鐘,我前臺應用程序,startSendDataSchedule再次運行併發送數據到多個日誌的服務器被打印出來。
第二次:從(*)再次點擊Home進入背景,startSendDataSchedule繼續運行。我斷開服務器以退出startSendDataSchedule。 Ater intervalTime,startSendDataSchedule被調用並按照我的期望執行。從現在起,定時器工作正常
我的錯誤是什麼?如果有人回答我,我將不勝感激。
我的代碼(SWIFT 3,xcode的8.2的iOS 10.2):
static func startFetching(inttervalTime : TimeInterval){
registerBackgroundTask() // register background with UIApplication.shared.beginBackgroundTask
//inttervalTime = 5 min
let date = NSDate().addingTimeInterval(inttervalTime)
print("Background trace1: thread=\(Thread.current)")
if (Thread.isMainThread == true) {
print("Background trace: main thread") // Go to Here
} else {
print("Background trace: thread=\(Thread.current)")
}
guard timerT == nil else { return }
// Set scheduler
//DispatchQueue.main.async {
self.timerT = Timer(fireAt: date as Date, interval: inttervalTime, target: self, selector: #selector(startSendDataSchedule), userInfo: nil, repeats: true)
//self.timerT = Timer.scheduledTimer(timeInterval: inttervalTime, target: self, selector: #selector(startSendDataSchedule), userInfo: nil, repeats: true)
//
RunLoop.main.add(timerT!, forMode: RunLoopMode.commonModes) // need if you use Timer init, no if use scheduledTimer
//}
// Subscribe to UIApplicationDidBecomeActive
NotificationCenter.default.addObserver(self, selector: #selector(reinstateBackgroundTask), name: NSNotification.Name.UIApplicationDidBecomeActive, object: nil)
}