应用正在发送多个通知

  • 本文关键字:通知 应用 ios xcode
  • 更新时间 :
  • 英文 :


我希望我的应用程序在给定时间发送单个通知并每天重复。通知发送正常,但它发送多个通知。因此,它不是发送 1,而是发送 5。我如何用代码解决这个问题。如果有意义,我有 2 个视图控制器。

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// ask for permission for notifications
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound], completionHandler: {didAllow, error in
})
// making the content of the notification 
let center = UNUserNotificationCenter.current()
let content = UNMutableNotificationContent()
content.title = "Get Motivated"
content.body = "Need Some Motivation? We've Got Plenty!"
content.sound = UNNotificationSound.default()
//triggering notification 
var dateComponents = DateComponents()
dateComponents.hour = 13
dateComponents.minute = 35
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
center.add(request) 

如果没有看到更多的代码,很难做到精确,所以如果我误解了什么,请原谅我。不过,这里有一些建议:

每次调用视图控制器的"viewDidLoad"方法时,您都会发送通知。对于一些上下文,在早期版本的 iOS 中,为了节省内存,当视图从视图层次结构中删除时(例如,在过渡到不同的全屏视图之后),视图会从内存中卸载;它不再完成,但"viewDidLoad"不保证在给定视图控制器的生命周期内只调用一次。除此之外,如果您多次实例化并呈现此类的视图控制器,"viewDidLoad"将被多次调用。

您的代码似乎也没有考虑到应用程序可能多次启动的可能性。

为了确保只安排一个通知,您可以:

  1. 检查已安排的通知,并查看您尝试添加的通知是否重复(您可以使用UNUserNotificationCenter.getPendingNotificationRequestsWithCompletionHandler方法);
  2. 删除所有已安排的通知,并在其位置添加新通知(请参阅 UNUser通知中心.removeAllPending通知请求)。

当然,您选择的方法取决于应用的逻辑。

祝你好运!

相关内容

  • 没有找到相关文章

最新更新