更新: Xpre 7.1•Swift 2.1
问题是您将日期组件设置为localTime区域而不是通知。
添加此扩展NSDate以从NSDate()返回所需的组件
extension NSDate { var minute: Int { return NSCalendar.currentCalendar().component(.Minute, fromDate: self)} var hour: Int { return NSCalendar.currentCalendar().component(.Hour, fromDate: self)} var day: Int { return NSCalendar.currentCalendar().component(.Day, fromDate: self)} var month: Int { return NSCalendar.currentCalendar().component(.Month, fromDate: self)} var year: Int { return NSCalendar.currentCalendar().component(.Year, fromDate: self)} func fireDateAt(hr: Int, min: Int) -> NSDate { let date = NSDate() return NSCalendar.currentCalendar().dateWithEra(1, year: year, month: month, day: { hr > date.hour || (hr == date.hour && min > date.minute) ? day : day + 1 }(), hour: hr, minute: min, second: 0, nanosecond: 0 )! }}timeZone属性
通知生效日期的时区。
fireDate中指定的日期根据该属性的值进行解释。如果指定nil(默认值),则触发日期将解释为绝对GMT时间,适用于诸如倒数计时器的情况。如果为该属性分配有效的NSTimeZone对象,则触发日期将被解释为挂钟时间,该时区会在时区发生更改时自动调整;一个适合这种情况的例子是闹钟。
func prayeralert (prayerName : String, prayHour : Int, prayMinute : Int) { var notification = UILocalNotification() notification.timeZone = NSTimeZone.localTimeZone() notification.alertBody = prayerName notification.fireDate = NSDate().fireDateAt(prayHour, min: prayMinute) UIApplication.sharedApplication().scheduleLocalNotification(notification)}


