我正在尝试在预定时间发送本地通知。但是通知没有出现在屏幕上,但是当我向下滑动时它会显示在通知中心。
这就是我想要实现的目标。这就是我所得到的
此代码来自我的AppDelegate的didFinishLaunchingWithOptions()。
// Setup local push notifications
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound], categories: nil))
scheduleNotifications()
这是scheduleNotifications()的代码
func scheduleNotifications() {
// create a corresponding local notification
let notification = UILocalNotification()
// Get today's date, time and year
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([NSCalendarUnit.Day, NSCalendarUnit.Month, NSCalendarUnit.Year], fromDate: NSDate())
// Sets the fire time to 2pm/1400 hours to anticipate user for lunch time
components.hour = 19
components.minute = 13
components.second = 00
notification.fireDate = components.date // Sets the fire date
notification.alertBody = "Enjoyed your lunch? Don't forget to track your expenses!"
notification.alertAction = "Add expense"
notification.repeatInterval = NSCalendarUnit.Day // Repeats the notifications daily
UIApplication.sharedApplication().scheduleLocalNotification(notification)
}
任何帮助将不胜感激。谢谢!
答案 0 :(得分:4)
您的问题是将NSDateComponents对象转换为NSDate的方式。
如果不为[{1}}对象设置components.date
,只需致电calendar
即可返回NSDateComponents
。
请尝试使用此代码:
nil
或者,您可以在组件对象上设置 notification.fireDate = calendar.dateFromComponents(components)
属性:
calendar
由于您要将通知对象上的components.calendar = calendar
属性设置为fireDate
,因此会立即触发,即在您有机会关闭应用并锁定屏幕之前。这种行为记录在UILocalNotification class reference
答案 1 :(得分:1)
我得到了同样奇怪的行为。刚刚创建了一个新项目来测试你的代码。
当您将fireDate更改为:
时,我注意到了什么notification.fireDate = NSDate(timeIntervalSinceNow: 10)
你会得到你想要的行为。
希望有所帮助!
答案 2 :(得分:0)