gpt4 book ai didi

ios - 过去某个日期的 NSNotifications

转载 作者:行者123 更新时间:2023-11-29 01:18:51 25 4
gpt4 key购买 nike

我正在编写一个应用程序,其中有很多基于过去的日期。例如,周年纪念日。假设这个日期是 2000 年 12 月 25 日。

用户从日期选择器中选择该日期,然后将该日期保存到用户的设备中。 (假设保存的日期是 2000 年 12 月 25 日)

在思考如何编写 NSNotifications 代码时,我意识到我最大的任务(现在看来不可能)是如何向用户发送 future 日期但基于日期的提醒在过去。

示例:
周年纪念日为 2000 年 12 月 25 日

每年 12 月 25 日提醒用户。

我想一定有办法,但我的搜索却空手而归。

最佳答案

不确定您使用的是什么语言,但这里的基本逻辑是一旦用户选择了一个日期,为关闭日期设置一个本地通知,然后将重复设置为 kCFCalendarUnitYear

Objective-C 中的示例代码

-(void)setAlert:(NSDate *)date{
//Note date here is the closest anniversary date in future you need to determine first
UILocalNotification *localNotif = [[UILocalNotification alloc]init];
localNotif.fireDate = date;
localNotif.alertBody = @"Some text here...";
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.repeatInterval = kCFCalendarUnitYear; //repeat yearly
//other customization for the notification, for example attach some info using
//localNotif.userInfo = @{@"id":@"some Identifier to look for more detail, etc."};
[[UIApplication sharedApplication]scheduleLocalNotification:localNotif];
}

设置警报并触发警报后,您可以通过实现在 AppDelegate.m 文件中处理通知

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void(^)())completionHandler{
//handling notification code here.
}

编辑:

关于如何获得最近的日期,你可以实现一个方法来做到这一点

-(NSDate *) closestNextAnniversary:(NSDate *)selectedDate {
// selectedDate is the old date you just selected, the idea is extract the month and day component of that date, append it to the current year, if that date is after today, then that's the date you want, otherwise, add the year component by 1 to get the date in next year
NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:selectedDate];
NSInteger day = [calendar component:NSCalendarUnitDay fromDate:selectedDate];
NSInteger year = [calendar component:NSCalendarUnitYear fromDate:[NSDate date]];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:year];
[components setMonth:month];
[components setDay:day];
NSDate *targetDate = [calendar dateFromComponents:components];
// now if the target date is after today, then return it, else add one year
// special case for Feb 29th, see comments below
// your code to handle Feb 29th case.
if ([targetDate timeIntervalSinceDate:[NSDate date]]>0) return targetDate;
[components setYear:++year];
return [calendar dateFromComponents:components];
}

你需要考虑的一件事是如何对待2月29日,你是想每年2月28日(非闰年)闹一次,还是要每四年闹一次?然后你需要实现你自己的逻辑。

关于ios - 过去某个日期的 NSNotifications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34844098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com