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。我建议将dateFormatter
和calendar
存储为静态属性。
【讨论】:
超级有帮助 - 谢谢!我能够使用它并循环遍历我的时间数组以使用 dtstring 安排多天的通知:)以上是关于Obj-C - 在特定时间触发本地通知?的主要内容,如果未能解决你的问题,请参考以下文章