16

I am new to iOS development, but have created the app and I am trying to create a daily notification for a set time. Currently the notification executes once for the given date/time. I am unsure how to use the repeatInterval method to schedule it daily. What is the best method to repeat the notification daily ? any help would be much appreciated (Y).

 var dateComp:NSDateComponents = NSDateComponents() dateComp.year = 2015; dateComp.month = 06; dateComp.day = 03; dateComp.hour = 12; dateComp.minute = 55; dateComp.timeZone = NSTimeZone.systemTimeZone() var calender:NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! var date:NSDate = calender.dateFromComponents(dateComp)! var notification:UILocalNotification = UILocalNotification() notification.category = "Daily Quote" notification.alertBody = quoteBook.randomQuote() notification.fireDate = date notification.repeatInterval = UIApplication.sharedApplication().scheduleLocalNotification(notification) 
0

4 Answers 4

15

You have to provide an NSCalendarUnit value like “HourCalendarUnit” or “DayCalendarUnit” for repeating a notification.

Just add this code to repeat the local notification daily :

notification.repeatInterval = NSCalendarUnit.CalendarUnitDay 
Sign up to request clarification or add additional context in comments.

4 Comments

For some reason notifications keep getting pushed one after the other. I changed it to minutes to test out but since then notifications keep being pushed even when i changed it back. Any ideas why ? @vizllx
I am having the same problem. Does any one know the cause and fix
If by pushed one after the other, I just found out that local notifications registered in different install sessions persist - If you uninstall and then reinstall the app, the previous notifications (if they haven't fired yet) will ALL fire at once if local notifications are enabled again in the newest install session. Hope this helps someone else.
Please update your answer for Swift 3 & Swift 4! It's very helpful to the new iOS Developers
13

So, had to modify the @vizllx's above code slighty. Here is the new line:

notification.repeatInterval = NSCalendarUnit.Day 

Here is a full working example I used:

let notification = UILocalNotification() /* Time and timezone settings */ notification.fireDate = NSDate(timeIntervalSinceNow: 8.0) notification.repeatInterval = NSCalendarUnit.Day notification.timeZone = NSCalendar.currentCalendar().timeZone notification.alertBody = "A new item is downloaded." /* Action settings */ notification.hasAction = true notification.alertAction = "View" /* Badge settings */ notification.applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1 /* Additional information, user info */ notification.userInfo = [ "Key 1" : "Value 1", "Key 2" : "Value 2" ] /* Schedule the notification */ UIApplication.sharedApplication().scheduleLocalNotification(notification) } 

Comments

3

The other answers show how to use the old, pre iOS 10 local notifications. With iOS 10 and later, you must use UNNotificationCenter as follows:

 let content = UNMutableNotificationContent() content.title = "This will appear in bold, on it's own line." content.subtitle = "This will appear in bold, on it's own line, below the title." content.body = "This will appear as normal text, below the title and subtitle." let triggerInputForHourlyRepeat = Calendar.current.dateComponents([.minute], from: intendedFireDateVariable) let trigger = UNCalendarNotificationTrigger.init(dateMatching: triggerInput, repeats: true) let request = UNNotificationRequest(identifier: "someUniqueID", content: content, trigger: trigger) let unc = UNUserNotificationCenter.current() unc.add(request, withCompletionHandler: { (error) in /// Handle error }) 

Helpful tutorials:

  1. https://www.techotopia.com/index.php/An_iOS_10_Local_Notification_Tutorial
  2. https://makeapppie.com/2016/11/21/manage-delete-and-update-notifications-in-ios-10/

1 Comment

The question asks about triggering a daily notification at a specific time. Your answer doesn't show how to do that. There's no code that shows a specific time being provided.
1

var repeatInterval: NSCalendarUnit

=> the docs say "The calendar interval at which to reschedule the notification."

so: use NSCalendarUnit.CalendarUnitDay

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.