本地通知适用于 ios 模拟器但不适用于设备

Local notifications working on ios simulator but not on device

我一直在努力让本地通知在我正在开发的这个应用程序上运行。我在标题中设置了带有一些文本的通知内容,body 蚀刻然后设置 UNCalendarNotificationTrigger

NSDate *tenSecondsFromNow = [cal dateByAddingUnit:NSCalendarUnitSecond value:10 toDate:[NSDate date] options:NSCalendarMatchFirst]
UNCalendarNotificationTrigger* trigger = [UNCalendarNotificationTrigger
                                          triggerWithDateMatchingComponents:[cal components:NSCalendarUnitYear |
                                                                             NSCalendarUnitMonth|
                                                                             NSCalendarUnitDay|
                                                                             NSCalendarUnitWeekday |
                                                                             NSCalendarUnitHour|
                                                                             NSCalendarUnitMinute|
                                                                                   NSCalendarUnitSecond fromDate:tenSecondsFromNow] repeats:NO];

并且我在 运行 这个

之后 10 秒安排了通知 运行
    // Schedule the notification.
[_notificationCentre addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
    if (error != nil) {
        DDLogError(@"%@", error.localizedDescription);
        DDLogError(@"%@", @"couldn't create chore reminder notification");
    }
}];

我遇到的问题是,当我在模拟器上 运行 这段代码时,通知完全符合我的预期,在我 运行 这篇文章 10 秒后显示通知在前台或后台时的代码。但是,当我在我的设备上 运行 时,通知不会出现。但是,当我将触发器更改为 UNTimeIntervalNotificationTrigger 设置时

UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:10 repeats:NO];

本质上是做同样的事情,在 addNotificationRequest 函数调用后 10 秒安排通知。这适用于模拟器和我的设备。

我想知道是否发生了一些奇怪的事情?或者模拟器处理通知的方式与设备略有不同。无论哪种方式,我都不知道发生了什么。

我不太清楚为什么会这样,但减少了触发器中要匹配的日期组件的数量 "fixed it"。还是不知道问题的根本原因,只是把数据组成部分改成

[cal components:NSCalendarUnitHour|NSCalendarUnitMinute fromDate:tenSecondsFromNow]

已解决问题。