我正在編寫一個包含通用秒錶計時器的OS X應用程序。我正在使用NSTimer
。我希望用戶能夠啓動計時器並在很長時間後(例如30分鐘)回到計時器,並且計時器仍然在運行。問題是我的計時器在計算機關閉或睡着時不能繼續運行,我不想讓計算機長時間保持打開狀態。有關iOS應用程序的這個問題有幾個線程,但沒有(至少我發現)與OS X有關。有誰知道這個問題的解決方法?舉例來說,我試圖模仿iOS附帶的「時鐘」應用程序的「秒錶」功能,除了使用筆記本電腦而不是電話。即使手機長時間關閉,「時鐘」應用程序中的秒錶也會繼續運行。Swift:保持NSTimer在計算機睡着時運行(OSX)
0
A
回答
0
我想通過這樣做的方式不是在背景中實際運行NSTimer
,而是要了解應用程序進入背景以及回到對焦狀態之間經過了多長時間。使用委託方法applicationWillResignActive:
和NSApplicationDelegate的applicationWillBecomeActive:
:
let timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(self), userInfo: nil, repeats: true)
var resignDate: NSDate?
var stopwatch = 0
func update() {
stopwatch += 1
}
func applicationWillResignActive(notification: NSNotification) {
timer.invalidate()
resignDate = NSDate() // save current time
}
func applicationWillBecomeActive(notification: NSNotification) {
if resignDate != nil {
let timeSinceResign = NSDate().timeIntervalSinceDate(resignDate!))
stopwatch += Int(timeSinceResign)
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(self), userInfo: nil, repeats: true)
resignDate = nil
}
}
applicationWillResignActive:
將調用每一個應用程序超出對焦的時間。發生這種情況時,我將當前日期(NSDate()
)保存在名爲resignDate
的變量中。然後,當應用程序被重新激活時(在知道了多久之後;沒關係),調用applicationWillBecomeActive:
。然後,我再採用當前時間的NSDate
值,並找到當前時間與resignDate
之間的時間量。在將這段時間加到我的時間值後,我可以重新驗證和NSTimer
,以便繼續。
相關問題
- 1. Mac OS X終端:計算機睡着時運行歌曲?
- 2. 如何保持NSTimer活着?
- 3. NSTimer計算小時
- 4. 保持計時器在後臺運行
- 5. 計算機在運行eclipse時關閉
- 6. 睡在睡眠中的NSTimer
- 7. Javascript運行時間計算機時區
- 8. 計算機處於睡眠狀態時是否可以運行Microsoft Outlook VBA?
- 9. NSTimer在運行時停止?
- 10. 保持機器人活着
- 11. C#保持程序在後臺運行,直到計算機完全關閉
- 12. 如何保持html5視頻允許在OSX上顯示睡眠
- 13. 計算算法運行時?
- 14. 不使用NSTimer製作計時器(swift)
- 15. 保持應用程序在手機睡眠/鎖定時崩潰
- 16. 保持NSTimer運行甚至應用程序在ios中的後臺運行
- 17. Android - 後臺服務不運行,如果手機睡着
- 18. Swift NSTimer只運行一次功能
- 19. Swift保持cli應用程序運行
- 20. 在遠程計算機上運行.ps1
- 21. 在進行順序計算時保持操作順序
- 22. 在Java中執行計算時保持Excel精度
- 23. 在計算機關閉時在VPS上運行SikuliX腳本?
- 24. 在計算數組時計算運行時錯誤
- 25. 如何在懸停時保持運行?
- 26. 如何檢查計算機何時進入睡眠或醒來?
- 27. 計算機休眠時啓動LaunchAgent睡眠
- 28. 在64位計算機上運行時出現NoClassDefFoundError
- 29. PHP標題(「位置:...」)在一臺計算機上運行,而不是在另一臺計算機上運行
- 30. VB6應用程序不會在某些計算機上運行,在其他計算機上運行良好