Swift 来自日期选择器的快速通知火灾
我希望将日期选择器的日期设置为本地通知fireDate。我从以下位置找到该代码:Swift 来自日期选择器的快速通知火灾,swift,datepicker,localnotification,Swift,Datepicker,Localnotification,我希望将日期选择器的日期设置为本地通知fireDate。我从以下位置找到该代码: 但是它不起作用,即使一切看起来都是正确的…问题出在哪里???看起来fireDate属性只是在toggleSwitch()方法中设置的。这种方法是如何实现的?我建议您将该方法的内容直接移动到notificationsOptions()方法中 作为一个旁白,您可能想为您的方法考虑一些更有用的名称:数据包()/和 NoTeCopeOpToStices()/>代码>稍后可能会导致您的维护头痛,因为它们不是非常有描述性的。
但是它不起作用,即使一切看起来都是正确的…问题出在哪里???看起来
fireDate
属性只是在toggleSwitch()
方法中设置的。这种方法是如何实现的?我建议您将该方法的内容直接移动到notificationsOptions()
方法中
作为一个旁白,您可能想为您的方法考虑一些更有用的名称:<代码>数据包()/<代码>和<代码> NoTeCopeOpToStices()/>代码>稍后可能会导致您的维护头痛,因为它们不是非常有描述性的。
尝试如下:
class ViewController: UIViewController {
@IBOutlet var datePicker: UIDatePicker!
@IBOutlet var notificationSwitch: UISwitch!
let localNotification = UILocalNotification()
override func viewDidLoad() {
super.viewDidLoad()
setUpNotificationsOptions()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func setUpNotificationsOptions() {
datePicker.datePickerMode = .Time
localNotification.timeZone = NSTimeZone.localTimeZone()
localNotification.repeatInterval = .Day
localNotification.alertAction = "Open App"
localNotification.alertBody = "a notification"
localNotification.soundName = UILocalNotificationDefaultSoundName
}
func toggleNotification() {
if notificationSwitch.on {
localNotification.fireDate = datePicker.date.fireDate
UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
} else {
localNotification.fireDate = nil
UIApplication.sharedApplication().cancelLocalNotification(localNotification)
}
}
@IBAction func toggleSwitch(sender: UISwitch) {
toggleNotification()
}
@IBAction func dateChanged(sender: UIDatePicker) {
toggleNotification()
}
}
您将需要这些扩展:
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)
}
var fireDate: NSDate {
let today = NSDate()
return NSCalendar.currentCalendar().dateWithEra(1,
year: today.year,
month: today.month,
day: { hour > today.hour || (hour == today.hour
&& minute > today.minute) ? today.day : today.day+1 }(),
hour: hour,
minute: minute,
second: 0,
nanosecond: 0
)!
}
}
谢谢你,伙计!!!“它只是工作”!!!!!!你太棒了,你救了我的命,我欠你的债!现在我有一个问题:所有的代码都被放入一个“设置”控制器中……但我需要localNotification.alertBody值是主viewController中数组的内容。如果我传递这个值,我会得到那个错误:使用未解析的标识符…我如何才能传递这个限制?可以在设置控制器中声明一个新的indexPath?@Swift1请随意打开另一个问题,并在那里发布相关代码和解释,如果您想让我看一下,可以在这里发布链接。好的,我在这里打开了一个新问题:请帮助我!谢谢您知道如何将datePicker值存储到NSuserdefaults吗?
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)
}
var fireDate: NSDate {
let today = NSDate()
return NSCalendar.currentCalendar().dateWithEra(1,
year: today.year,
month: today.month,
day: { hour > today.hour || (hour == today.hour
&& minute > today.minute) ? today.day : today.day+1 }(),
hour: hour,
minute: minute,
second: 0,
nanosecond: 0
)!
}
}