2015-11-28 59 views
0

我使用backgroundTaskIdentifier使秒錶在應用程序關閉時繼續。計數器在應用程序關閉時更新正常。backgroundTaskIdentifier - 當應用程序關閉時,UIAlert不會彈出

但我希望在應用程序關閉時收到彈出式警報通知。現在它在我打開應用程序時彈出,但這對我沒有幫助,因爲定時器已經停止。

相關問題。如果服務器上沒有任何內容被推送,應用程序是否可以推送通知?我的意思是,當計時器完成後,我可以爲我的應用程序添加徽章嗎

變量聲明

var backgroundTaskIdentifier: UIBackgroundTaskIdentifier? 

viewDidLoad中

NSNotificationCenter.defaultCenter().addObserver(self, selector: "updateTimerBasedViews", name: Timer.notificationSecondTick, object: timer) 
NSNotificationCenter.defaultCenter().addObserver(self, selector: "timerComplete", name: Timer.notificationComplete, object: timer) 

backgroundTaskIdentifier = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({ 
     UIApplication.sharedApplication().endBackgroundTask(self.backgroundTaskIdentifier!) 
    }) 

適用功能

func updateTimerBasedViews() { 
    updateTimerLabel() 
    updateProgressView() 
} 

func timerComplete() { 
    switchToPickerView() 
    playAlarm() 
    // TO DO : ADD UIAlert 

    let alert = UIAlertController(title: title, message: "Time to do it!", preferredStyle: .Alert) 
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 

    //self.presentViewController(alert, animated: true, completion: nil) // old 

    presentViewController(alert, animated: true) {() -> Void in 
     let localNotification:UILocalNotification = UILocalNotification() 
     localNotification.alertAction = "Testing" 
     localNotification.alertBody = "Hello World!" 
     localNotification.fireDate = NSDate(timeIntervalSinceNow: 5) 
     UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 
    } 

的AppDelegate

application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Sound, .Alert, .Badge], categories: nil)) 

回答

1

如果您想在您的應用程序中顯示彈出式窗口,但顯示UIAlertAction的設備後臺任務不正確。它會在應用程序上下文中顯示氣泡,而不是os系統。

你的方法應該是使用local notifications

你應該認識到水木清華這樣的:

application.registerUserNotificationSettings(UIUserNotificationSettings (forTypes: UIUserNotificationType.Alert, categories: nil)) 

var localNotification:UILocalNotification = UILocalNotification() 
localNotification.alertAction = "Testing" 
localNotification.alertBody = "Hello World!" 
localNotification.fireDate = NSDate(timeIntervalSinceNow: 5) 
UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 

你可以找到很多的教程,如this

+0

謝謝。我會標記爲正確的。你越來越接近1000 :)我剛剛意識到我需要區分應用程序,本地和推送通知。這會給我一個紅色的徽章和一個警報彈出,即使應用程序關閉了嗎?我可以把它放在上面的同一個函數中嗎?我認爲很多人把這段代碼放在AppDelegate中?我也應該選擇操作系統還是應用程序彈出?兩者都不好對嗎?如果應用程序已打開,則無法通過本地通知。 – TokyoToo

+0

我想,你應該試試這個,我的意思是,據我所知你想在後臺任務完成後發送本地通知。也許你應該在後臺任務中調用'registerUserNotificationSettings'。但它看起來像正確的方式來解決你的問題 – katleta3000

+0

把這個代碼'application.registerUserNotificationSettings'在didFinishLaunching和其他代碼在你後臺任務完成處理程序 – katleta3000

相關問題