应用程序正在发送多个通知

时间:2017-06-10 04:20:26

标签: ios xcode

我希望我的应用在给定时间发送一个通知并每天重复。通知发送正常,但它发送多个通知。因此,它不发送1,而是发送5.如何使用代码修复此问题。如果有意义,我有2个viewcontrollers。

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) 

1 个答案:

答案 0 :(得分:0)

如果没有看到更多的代码,有点难以准确,如果我误解了某些内容,请原谅我。不过,这里有一些建议:

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

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

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

  1. 检查已安排的通知,看看您尝试添加的通知是否重复(您可以使用UNUserNotificationCenter.getPendingNotificationRequestsWithCompletionHandler方法);
  2. 删除所有已安排的通知,并在其位置添加新通知(请参阅UNUserNotificationCenter.removeAllPendingNotificationRequests)。
  3. 您选择的方法当然取决于您应用的逻辑。

    祝你好运!