2015-07-28 44 views
0

我在SWIFT(2.0)斯威夫特,Apllication上的模擬器的背景,但不是設備

var timer: dispatch_source_t! 
var a = 0 
func startTimer() { 
    let queue = dispatch_queue_create("com.domain.app.timer", nil) 
    timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue) 
    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC, 1 * NSEC_PER_SEC) // every 60 seconds, with leeway of 1 second 
    dispatch_source_set_event_handler(timer) { 
     self.a = self.a+1 
     print(self.a) 
    } 
    dispatch_resume(timer) 
} 

func stopTimer() { 
    dispatch_source_cancel(timer) 
    timer = nil 
} 
這樣做的代碼上運行

的問題是,在模擬器上此代碼的工作很好,我在CONSOL見每秒遞增一個數字,當我進入模擬器的主頁時,數字仍然遞增, 在設備上,一旦我們退出應用程序上下文,數字就停止遞增。 那麼如何讓它在設備上保持增量?

回答

1

默認情況下,iOS應用程序不支持後臺執行。您可以使用beginBackgroundTaskWithName方法開始執行有限長度的後臺任務,或者您必須啓用特殊背景模式,如voip,位置,遠程通知才能在後臺運行。 (使用這些模式是由蘋果公司當您提交應用的Appstore審查)

更多信息:Background execution documentation

我同意,這是非常容易引起誤解,它工作在模擬器,當它不應該。

+0

感謝您的回答,但有沒有辦法在後臺執行我的示例代碼,要求用戶權限或其他? –

+0

'beginBackgroundTaskWithName'可以實現,但是隻有在應用程序進入暫停模式之前才完成一些冗長的任務。這並不意味着爲了讓它保持運行。你想達到什麼目的? – Kirsteins

+0

好的,我想運行一個沒有長時間的任務,一直運行,所以你告訴我這是不可能的嗎? –