Set local notification for everyday at midnight

匿名 (未验证) 提交于 2019-12-03 10:24:21

问题:

I'm trying to create a simple notification that will appear every day at midnight. This is the code I use:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {     // Override point for customization after application launch.     application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert | UIUserNotificationType.Badge, categories: nil))      var thisDate = NSDateComponents()     thisDate.hour = 0     thisDate.minute = 0     thisDate.second = 0      var calender = NSCalendar()      var localNotification:UILocalNotification = UILocalNotification()     localNotification.timeZone = NSTimeZone.localTimeZone()     localNotification.fireDate = calender.dateFromComponents(thisDate)     localNotification.repeatInterval = .CalendarUnitDay     localNotification.alertAction = "Open App"     localNotification.alertBody = "Here is the seven o'clock notification"     localNotification.soundName = UILocalNotificationDefaultSoundName     localNotification.applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1     UIApplication.sharedApplication().scheduleLocalNotification(localNotification)      return true }    

I cant figure out why it's not working, any idea?

回答1:

There are many problems at your code so I will explain it with comments through the code as follow:

import UIKit class ViewController: UIViewController {     @IBOutlet weak var midnightSwitch: UISwitch!     // you should declare your vars here     let localNotificationDailyAt12am = UILocalNotification()     // you should declare your funcions here     // you have to register the user notifications settings options (badge, alert and sound if desired)     func setUIUserNotificationOptions() {         UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Badge | UIUserNotificationType.Sound | UIUserNotificationType.Alert, categories: nil))     }     // now lets setup your notification     func notificationsOptions12am() {         // defines localtime         localNotificationDailyAt12am.timeZone = NSTimeZone.localTimeZone()         // confirms the alert dialog box action         localNotificationDailyAt12am.hasAction = true         // defines the notification alert body text         localNotificationDailyAt12am.alertBody = "The midnight notification message"         // defines the daily time interval         localNotificationDailyAt12am.repeatCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)         localNotificationDailyAt12am.repeatInterval = .CalendarUnitDay         // defines the notification alert button text         localNotificationDailyAt12am.alertAction = "Open App"         // defines the default sound for your notification         localNotificationDailyAt12am.soundName = UILocalNotificationDefaultSoundName         // increments the badge counter         localNotificationDailyAt12am.applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1         // defines your firedate tomorrow at 12am ( note: extension NSDate tomorrowAt12am at the bottom )         localNotificationDailyAt12am.fireDate = NSDate().tomorrowAt12am         // lets set it up         UIApplication.sharedApplication().scheduleLocalNotification(localNotificationDailyAt12am)     }     override func viewDidLoad() {         super.viewDidLoad()         setUIUserNotificationOptions()         notificationsOptions12am()      }     override func didReceiveMemoryWarning() {         super.didReceiveMemoryWarning()         // Dispose of any resources that can be recreated.     }     @IBAction func switched(sender: AnyObject) {         localNotificationDailyAt12am.fireDate = midnightSwitch.on ?             NSDate().tomorrowAt12am :                                // tomorrow at 12am                 NSDate().dateByAddingTimeInterval(3155673600)        // will never fire (100 years from now)     } } extension NSDate {     var day:   Int { return NSCalendar.currentCalendar().components(.Day,   fromDate: self).day   }     var month: Int { return NSCalendar.currentCalendar().components(.Month, fromDate: self).month }     var year:  Int { return NSCalendar.currentCalendar().components(.Year,  fromDate: self).year  }     var tomorrowAt12am: NSDate {         return  NSCalendar.currentCalendar().dateWithEra(1, year: year, month: month, day: day+1, hour: 0, minute: 0, second: 0, nanosecond: 0)!     } }


回答2:

Try also set day, month and year for date components:

var thisDate = NSDateComponents() thisDate.hour = 0 thisDate.minute = 0 thisDate.second = 0


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!