Swift 4重复本地通知

时间:2019-01-04 09:06:13

标签: ios swift notifications

我正在尝试发出一条将在每天同一时间(7:00 AM)触发的通知。如果我使用UNTimeIntervalNotificationTrigger而不是UNCalendarNotificationTrigger,那我就能够得到触发的通知,这正是我真正想要的。这是我目前所拥有的:

在AppDelegate.swift中,我有:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (didAllow, error) in
        if error != nil {
            print(error as Any)
        }
    }

    return true
}

我还记得也导入UserNotifications

当用户按下ViewController.swift中的按钮时,将运行:

let content = UNMutableNotificationContent()
    content.title = "Do your daily review"
    content.badge = 1

    let triggerTime = DateComponents.init(hour: 7, minute: 0, second: 0)
    let trigger = UNCalendarNotificationTrigger(dateMatching: triggerTime, repeats: true)

    let request = UNNotificationRequest(identifier: "dailyNotification", content: content, trigger: trigger)

    UNUserNotificationCenter.current().add(request, withCompletionHandler: nil

您能告诉我这里有什么问题吗,为什么UNTimeIntervalNotificationTrigger有效但UNCalendarNotificationTrigger无效吗?

2 个答案:

答案 0 :(得分:0)

我不确定它是否可以解决您的问题,但是您是直接从init设置DateComponent的。我建议您通过初始化一个空的DateComponent并仅根据需要设置小时数来做到这一点。

所以,您可以尝试这样做吗:

let content = UNMutableNotificationContent()
content.title = "Do your daily review"
content.badge = 1

var triggerTime = DateComponents()
triggerTime.hour = 7

let trigger = UNCalendarNotificationTrigger(dateMatching: triggerTime, repeats: true)

let request = UNNotificationRequest(identifier: "dailyNotification", content: content, trigger: trigger)

UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)

我从自己的角度做到了,并且有效。

我希望这会有所帮助。

答案 1 :(得分:0)

我的原始代码工作正常,我只需要以不同的方式进行测试。出于某种原因,如果我将代码中的时间设置为7:00 AM,然后在Mac上模拟该时间,则该时间不起作用,但是如果我将其设置为实时时间+ 1分钟,并且我等待了一分钟,却没有改变计算机的时间,它可以正常工作。也许Apple会在时间跳转后立即停止通知,以防止人们在更改时区时遇到通知问题。