如何在 iOS 中安排可以暂停或删除的本地通知?
Posted
技术标签:
【中文标题】如何在 iOS 中安排可以暂停或删除的本地通知?【英文标题】:How to schedule local notifications in iOS that can be paused or removed? 【发布时间】:2016-07-28 22:33:11 【问题描述】:我正在尝试使用以下 ios 库实现本地前台通知:https://github.com/kunass2/BSForegroundNotification
我希望在倒计时达到 0 后触发通知,但我无法找到一种在计时器上实现暂停和重新启动按钮的好方法,该按钮也会暂停通知或设置新通知。
这是我当前的实现,它失败了,因为如果我按下重新启动以启用重置计时器的新通知的触发,旧的通知也会被触发:
func setupLocalNotifications() // called whenever current timer countdown reaches 0
let notification = BSForegroundNotification(userInfo: userInfoForCategory("ONE_BUTTON"))
notification.timeToDismissNotification = NSTimeInterval(10)
// Delay 10 seconds
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(self.timeRemaining * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) () -> Void in
if self.willDisplayForegroundNotification
notification.presentNotification()
notification.delegate = self
@IBAction func startPauseButtonPressed(sender: AnyObject)
if self.counting
self.timer?.invalidate()
UIApplication.sharedApplication().cancelAllLocalNotifications()
self.willDisplayForegroundNotification = false
self.counting = false
startPauseButton.setTitle("Resume", forState: .Normal)
startPauseButton.setImage(UIImage(named: "Play.png"), forState: .Normal)
else
setupLocalNotifications()
self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(NewFocusViewController.countdown), userInfo: nil, repeats: true)
self.willDisplayForegroundNotification = true
self.counting = true
startPauseButton.setTitle("Pause", forState: .Normal)
@IBAction func restartButtonPressed(sender: AnyObject)
self.timer?.invalidate()
UIApplication.sharedApplication().cancelAllLocalNotifications()
self.timeRemaining = Double(self.timeMax)
self.counting = false
self.willDisplayForegroundNotification = false
self.updateTimer()
self.startPauseButton.setTitle("Start", forState: .Normal)
【问题讨论】:
【参考方案1】:我通过在 App Delegate 中实现 didReceiveLocalNotification() 方法来呈现前台通知,从而解决了这个问题。
【讨论】:
以上是关于如何在 iOS 中安排可以暂停或删除的本地通知?的主要内容,如果未能解决你的问题,请参考以下文章
在 PhoneGap/Cordova 中安排本地通知在 iOS 模拟器上不起作用