2016-03-23 18 views
1

毎日午前8時に発砲する予定のローカル通知があり、午前8時に3回、午前9時と午後12時に再発するそれは翌日に同じことをやり直します。ローカル通知複数回の発砲と予定外時間

関数が複数回呼び出されたかどうか(複数回呼び出されていても間違った時間に関数が呼び出されなかった場合でも)はチェックされました。そして、私が考えることができるほとんどすべては、コードを実装しましたが、役に立たないものです。

これは私が通知を設定する方法である:

func setUpMainLocalNotification() { 

      let notificationSettings = UIApplication.sharedApplication().currentUserNotificationSettings() 

        if notificationSettings?.types == .None { 

         return 

        } 


    let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
    let currentCalendar = NSCalendar.currentCalendar() 
    let date = NSDate() 
    let calendarComponents = calendar.components([.Year, .Month, .WeekOfMonth, .Hour, .Minute, .Second], fromDate: date) 



        calendarComponents.hour = 8 

        calendarComponents.minute = 0 
        calendarComponents.second = 0 

        currentCalendar.timeZone = NSTimeZone.defaultTimeZone() 



        let reminder = UILocalNotification() 
        reminder.timeZone = NSTimeZone.defaultTimeZone() 
        reminder.fireDate = currentCalendar.dateFromComponents(calendarComponents) 
        reminder.alertBody = "Notification" 
        reminder.category = "CATEGORY_ID" 

        reminder.repeatInterval = .Day 

        reminder.alertAction = "Reply" 
        reminder.soundName = "sound.aif" 



        UIApplication.sharedApplication().scheduleLocalNotification(reminder) 

} 

更新:

私はここで自分の質問を読んでいたとして、私は時間の私を設定した後、タイムゾーンを設定していることに気づきました私の通知を発射したかったので、時間を設定する前に次の行を移動して、動作するように見えますが、1回だけ、8時に起動します。

currentCalendar.timeZone = NSTimeZone.defaultTimeZone() 

答えて

1

あなたはどこにでも新しいものを設定する前に、以前の通知をキャンセルするのですか?

は、それが助けかどうかを確認し、あなたの方法の初め

UIApplication.sharedApplication().cancelAllLocalNotifications() 

でこれを試してみてください。私は通知キャンセルを処理するのですけれども

+0

おかげで最新のコードです。私は解決策で私の質問を更新しました。 –

1

これは、

UIApplication.shared.cancelAllLocalNotifications() 
関連する問題