2017-06-10 15 views
1

私のアプリが一度に1つの通知を送信して毎日繰り返すようにします。通知は正常に送信されますが、複数の通知が送信されます。したがって、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) 

答えて

0

それは私が何かを誤解している場合ので、私を許して、あなたのコードの多くを見ることなく正確には少し難しいです。それにもかかわらず、ここにいくつかの提案があります:

あなたのView Controllerの "viewDidLoad"メソッドが呼び出されるたびに通知を送信しています。ちょっとした文脈では、以前のバージョンのiOSでは、メモリを節約するために、ビューがビュー階層から削除されたとき(たとえば、別のフルスクリーンビューに移行した後)にメモリからアンロードされました。それ以上は行われませんが、 "viewDidLoad"は、指定されたView Controllerの存続期間中に一度だけ呼び出されるとは限りません。これに加えて、このクラスのView Controllerをインスタンス化して複数回提示すると、「viewDidLoad」が複数回呼び出されます。

あなたのコードも、アプリが複数回起動される可能性を考慮していないようです。一つだけ通知が予定されていることを保証するために

、次のことができます。すでにスケジュール通知の

  1. チェックして追加しようとしている1は、(あなたがそのためにUNUserNotificationCenter.getPendingNotificationRequestsWithCompletionHandler方法を使用することができます重複しているかどうかを確認);
  2. 予定されている通知をすべて削除し、新しい通知をその場所に追加します(UNUserNotificationCenter.removeAllPendingNotificationRequestsを参照)。

もちろん、選択する方法はアプリのロジックによって異なります。

幸運を祈る!

+0

保留中の通知をすべて削除しました。私はそれから通知を出します。ありがとうございました – iasla

関連する問題