Obj-C - 在特定时间触发本地通知?

Posted

技术标签:

【中文标题】Obj-C - 在特定时间触发本地通知?【英文标题】:Obj-C - Fire local notifications at specific times? 【发布时间】:2021-04-13 18:33:53 【问题描述】:

我正在构建一个日历应用程序,我希望我的用户能够在约会前 30 分钟或约会前 60 分钟收到通知。也就是说,如何安排本地通知在从数组或字典中提取的预定时间前 30 分钟触发?我当前的代码能够在特定时间从后台触发通知,但我不确定如何将我的用户设置的返回日期调用给 App Delegate?

例如来自我的服务器的数组数据:

"Apr 14 2021 12:04 PM",
"Apr 17 2021 12:27 PM"

我的代码目前在应用委托中:

AppDelegate.m

- (void)applicationDidEnterBackground:(UIApplication *)application 
    
    NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar] ;
       NSDate *now = [NSDate date];
       NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:now];
       [components setHour:7];
       [components setMinute:00];

       UILocalNotification *notification = [[UILocalNotification alloc]init];
       notification.fireDate = [calendar dateFromComponents:components];
       notification.repeatInterval = NSDayCalendarUnit;
       [notification setAlertBody:@"Ready to start your day?"];
       // notification.soundName = UILocalNotificationDefaultSoundName;
       [[UIApplication sharedApplication] scheduleLocalNotification:notification];
    
    

感谢任何有关我应该如何执行此操作的帮助!我希望我解释我正在尝试做的事情的方式是有意义的。

【问题讨论】:

您将通知的日期部分设置为早上 7 点。您是否尝试将 fireDate 设置为您从服务器获取的日期? 我可以用一个日期来完成,但是如果我有一组日期我想要通知触发呢?例如。如果 2021 年 4 月 2 日下午 5:00 和 2021 年 4 月 14 日 10:00 在我的数组中返回,我如何将上述代码设置为同时触发而不是仅触发一次? @dasdom 您需要在每个开火日期收到通知。 【参考方案1】:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"MMM d yyyy h:mm a";

NSString *dtString = @"Apr 14 2021 12:04 PM";
NSDate *date = [dateFormatter dateFromString:dtString];

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar] ;
NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date];
components.minute -= 30;
NSDate *fireDate = [calendar dateFromComponents:components];

然后使用fireDate 设置通知的fireDate。我建议将dateFormattercalendar 存储为静态属性。

【讨论】:

超级有帮助 - 谢谢!我能够使用它并循环遍历我的时间数组以使用 dtstring 安排多天的通知:)

以上是关于Obj-C - 在特定时间触发本地通知?的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift 3中每天在特定时间触发本地通知

iOS 10:如何在特定日期触发后重复本地通知?

检查用户是不是允许本地通知。 iOS 8. Obj-C

Obj-C,如何删除以前设置的本地推送通知?

如何阻止计划的本地通知在特定日期后触发?

UNUserNotificationCenter Swift - 在特定情况下未触发本地通知