iOS Swift 本地通知没有 "popping up"

iOS Swift Local notification not "popping up"

我正在尝试在预定时间发送本地通知。但是通知没有出现在屏幕上,但是当我向下滑动时它会显示在通知中心。

这就是我想要实现的目标 这就是我得到的。

此代码来自我的 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)
}

如有任何帮助,我们将不胜感激。谢谢!

检查设置 > YourApp > 通知

验证那里的权限。 "Do Not Disturb" 也不应该处于活动状态。

我也有同样的奇怪行为。刚刚创建了一个新项目来测试您的代码。

当您将 fireDate 更改为:

时我注意到了什么
notification.fireDate = NSDate(timeIntervalSinceNow: 10)             

你会得到你想要的行为。

希望对您有所帮助!

您的问题是您将 NSDateComponents 对象转换为 NSDate 的方式。

只调用 components.date 而不为 NSDateComponents 对象设置 calendar 将 return nil.

试试改用这个:

 notification.fireDate = calendar.dateFromComponents(components)

或者,您可以在组件对象上设置 calendar 属性:

components.calendar = calendar

因为您将通知对象上的 fireDate 属性 设置为 nil,它会立即触发,即在您有机会关闭应用程序并锁定屏幕之前.此行为记录在 UILocalNotification class reference

对我来说,当 phone 使用数据线连接时,通知只会显示在通知中心 - 当应用程序处于前台时,不会显示横幅。 当电缆断开连接时,横幅会显示在应用程序上。