为特定时间设置本地通知

Set Local Notification for Specific Time

我正在尝试安排本地通知,以便它在 9:00pm 发生并每周重复一次。我有以下代码,并且不断收到一条错误消息,提示“无法将 NSDateComponents 类型的值分配给 .fireDate。我知道 .fireDate 只接受 NSDate 类型,但是。我想不出设置小时变量和分钟变量的方法对于 NSDate 类型,因为我认为不可能这样做。

func Notification(){

    let dateComponents = NSDateComponents()
    dateComponents.day = 4
    dateComponents.month = 7
    dateComponents.year = 2016
    dateComponents.hour = 21
    dateComponents.minute = 00

    let Notification = UILocalNotification()

    Notification.alertAction = "Go Back To App"
    Notification.alertBody = "Did you complete your HH and QC?"
    Notification.repeatInterval = NSCalendarUnit.WeekOfYear
    Notification.timeZone = NSTimeZone.defaultTimeZone()

    Notification.fireDate = dateComponents
    UIApplication.sharedApplication().scheduleLocalNotification(Notification)
}

您应该像这样从日期组件中获取日期:

let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)!
calendar.timeZone = NSTimeZone.localTimeZone()
calendar.locale = NSLocale.currentLocale()
let date = calendar.dateFromComponents(dateComponents)!
Notification.fireDate = date

这是您的操作方法。

Fully Tested on Swift 2.0

//注意我从日期选择器中获取了日期时间

   func scheduleLocalNotification() {
        let localNotification = UILocalNotification()

        localNotification.fireDate = fixNotificationDate(datePicker.date)
        localNotification.alertBody = "Hey, you must go shopping, remember?"
        localNotification.alertAction = "View List" // Change depending on your action

        localNotification.category = "reminderCategory"

        UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
    }

//这个函数可以帮你生成开火日期。

func fixNotificationDate(dateToFix: NSDate) -> NSDate {
    let dateComponets: NSDateComponents = NSCalendar.currentCalendar().components([NSCalendarUnit.Day, NSCalendarUnit.Month, NSCalendarUnit.Year, NSCalendarUnit.Hour, NSCalendarUnit.Minute], fromDate: dateToFix)

    dateComponets.second = 0

    let fixedDate: NSDate! = NSCalendar.currentCalendar().dateFromComponents(dateComponets)

    return fixedDate
}

不要忘记请求推送通知的权限。

Link 我参与的项目 https://drive.google.com/open?id=0B2csGr9uKp1DR0ViZFZMMEZSdms