当前位置: 首页 > 面试题库 >

即使每天的特定时间过去了,如何发送本地通知?

上官正志
2023-03-14
问题内容

我有这段代码,它每天早上7点运行一个通知,它获取当前日期,然后在到达设定的时间时运行该通知,我的问题是,如果时间已经超过了设定的运行时间,那么它将每天在用户当前时间不是我早上7点的时间,这是我的代码

var dateFire: NSDateComponents = NSDateComponents()
var getCurrentYear = dateFire.year
var getCurrentMonth = dateFire.month
var getCurrentDay = dateFire.day

dateFire.year = getCurrentYear
dateFire.month = getCurrentMonth
dateFire.day = getCurrentDay
dateFire.hour = 7
dateFire.minute = 0
dateFire.timeZone = NSTimeZone.defaultTimeZone()


var calender: NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
var date: NSDate = calender.dateFromComponents(dateFire)!

var localNotification = UILocalNotification()
localNotification.fireDate = date
localNotification.alertBody = "A new day has begun and a fresh layer on snow lies on the mountain! Can you beat your highscore?"
localNotification.repeatInterval = NSCalendarUnit.CalendarUnitDay

UIApplication.sharedApplication().scheduleLocalNotification(localNotification)

如您所见NSCalendarUnit.CaldendarUnitDay,它每天早上7点运行。我不知道,即使时间是早上7点以后,通知在第二天仍将继续运行,将不胜感激


问题答案:

更新了@ Paulw11对Swift 3.0的回答,并包装在一个函数中:

/// 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);

}


 类似资料:
  • 我想创建一个不和谐机器人,每天在特定的时间发送2条消息。下面的代码将使消息进入一个循环,例如每5秒发送一条消息。我如何设置每天发送消息的具体时间,例如,消息1在下午6点,消息2在上午10点。我在这里找到了这段代码,但是没有找到我想要的。

  • 问题内容: 我是iOS开发的新手,但是已经创建了该应用程序,并且我试图在设定的时间创建每日通知。当前,通知针对给定的日期/时间执行一次。我不确定如何使用repeatInterval方法每天进行调度。每天重复通知的最佳方法是什么?任何帮助将不胜感激(是)。 问题答案: 您必须提供NSCalendarUnit值(例如“ HourCalendarUnit”或“ DayCalendarUnit”)以重复通

  • 问题内容: 我正在尝试创建一个计时器,该计时器在用户设置好时间后触发本地通知。我遇到的问题是我无法找出一种方法来设置本地通知在晚上7:00发出。研究此问题时发现的几乎所有方法都涉及从当前日期起在一定时间范围内关闭本地通知。我试图允许用户选择7:00 PM,然后在该时间关闭通知。从逻辑上讲,这可以通过设置最终时间(用户选择的值)-当前时间来实现,这将为您带来时差。但是,我不确定如何执行此操作。 非常

  • 如何将Airflow dag配置为每天在指定时间执行,无论发生什么,就像crons一样。 我知道使用 TimeSensor 可以获得类似的行为,但在这种情况下,这取决于传感器任务,并且可能与 dag 执行时间冲突。 示例:对于传感器方法,如果我让传感器在0小时15分钟运行,但如果dag在稍后执行,则我的任务会延迟,因此即使对于传感器方法,我也需要确保Dag在正确的时间执行。 那么如何确保Dag在指

  • 问题内容: 是否可以创建一个保证为UTC且在过去特定时间(例如一个小时前或一天前)的对象,这是一个好主意吗? 我已经审查了4小时之前的堆栈溢出问题获取日期及其答案。但是我想避免添加更多的依赖项,例如和,并且可接受的答案使用的将是本地时区,不是吗? 问题答案: 正如评论中生动讨论的那样,建议使用该软件包。简单的解决方案: 这个刚印出来 由于现在是UTC时间,因此输出就是您所要求的。在本身偏移中性。它

  • 现在我每天下午3点运行我的cron作业 但是我想一天运行两次cron作业。上午10点30分和下午2点30分 我相信此命令将在上午 10:30 运行。我应该如何在下午 2:30 运行它?