How to send a localNotification at a specific time everyday, even if that time has passed?

前端 未结 4 2010
执笔经年
执笔经年 2020-12-17 06:33

I have this code which runs a notification everyday at 7am, it gets the current date and then runs the notification when it gets to the set hour, my problem is if the time h

4条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-17 07:12

    Updated @Paulw11 's answer to Swift 3.0 and wrapped up in a function:

    /// Set up the local notification for everyday
    /// - parameter hour: The hour in 24 of the day to trigger the notification
    class func setUpLocalNotification(hour: Int, minute: Int) {
    
        // have to use NSCalendar for the components
        let calendar = NSCalendar(identifier: .gregorian)!;
    
        var dateFire = Date()
    
        // if today's date is passed, use tomorrow
        var fireComponents = calendar.components( [NSCalendar.Unit.day, NSCalendar.Unit.month, NSCalendar.Unit.year, NSCalendar.Unit.hour, NSCalendar.Unit.minute], from:dateFire)
    
        if (fireComponents.hour! > hour 
            || (fireComponents.hour == hour && fireComponents.minute! >= minute) ) {
    
            dateFire = dateFire.addingTimeInterval(86400)  // Use tomorrow's date
            fireComponents = calendar.components( [NSCalendar.Unit.day, NSCalendar.Unit.month, NSCalendar.Unit.year, NSCalendar.Unit.hour, NSCalendar.Unit.minute], from:dateFire);
        }
    
        // set up the time
        fireComponents.hour = hour
        fireComponents.minute = minute
    
        // schedule local notification
        dateFire = calendar.date(from: fireComponents)!
    
        let localNotification = UILocalNotification()
        localNotification.fireDate = dateFire
        localNotification.alertBody = "Record Today Numerily. Be completely honest: how is your day so far?"
        localNotification.repeatInterval = NSCalendar.Unit.day
        localNotification.soundName = UILocalNotificationDefaultSoundName;
    
        UIApplication.shared.scheduleLocalNotification(localNotification);
    
    }
    

提交回复
热议问题