Ios 检测将触发的下一个UILocalNotification

Ios 检测将触发的下一个UILocalNotification,ios,cocoa-touch,nsarray,uilocalnotification,Ios,Cocoa Touch,Nsarray,Uilocalnotification,是否有办法找到下一个将触发的本地通知的NSDate 例如,我设置了三个本地通知: 通知#1:昨天下午3:00起火,每天重复一次 通知#2:今天下午5:00点火,每天重复一次 通知#3:明天下午6:00点火,每天重复一次 鉴于目前是下午4点,下一个将发出的本地通知是通知2 如何检索此本地通知并获取其日期 我知道我可以在一个数组中检索这些本地通知,但如何根据今天的日期获取下一个将触发的通知?您任务的主要目标是确定给定日期后的“下一个触发日期” 每次通知的日期。 UILocalNotification

是否有办法找到下一个将触发的本地通知的
NSDate

例如,我设置了三个本地通知:

通知#1:昨天下午3:00起火,每天重复一次

通知#2:今天下午5:00点火,每天重复一次

通知#3:明天下午6:00点火,每天重复一次

鉴于目前是下午4点,下一个将发出的本地通知是通知2

如何检索此本地通知并获取其日期


我知道我可以在一个数组中检索这些本地通知,但如何根据今天的日期获取下一个将触发的通知?

您任务的主要目标是确定给定日期后的“下一个触发日期” 每次通知的日期。
UILocalNotification
NSLog()
输出显示下一个火灾日期, 但不幸的是,它似乎不能作为(公共)财产使用

我已从(使用小字体)获取代码 改进)并将其作为
UILocalNotification
的类别方法重写。 (这并不完美。它不包括时区已被删除的情况。) 已分配给通知。)

使用它,您可以根据 下次火灾日期:

NSArray *notifications = @[notif1, notif2, notif3];

NSDate *now = [NSDate date];
NSArray *sorted = [notifications sortedArrayUsingComparator:^NSComparisonResult(UILocalNotification *obj1, UILocalNotification *obj2) {
    NSDate *next1 = [obj1 myNextFireDateAfterDate:now];
    NSDate *next2 = [obj2 myNextFireDateAfterDate:now];
    return [next1 compare:next2];
}];

现在,
sorted[0]
将是下一个发出的通知。

非常感谢您的详细回复!真棒的答案,至少值得+2!当您复制并粘贴此代码时,请注意switch语句,因为您可能需要在此处添加一些额外的代码:)@MartinR您可以根据[NSTimeZone defaultTimeZone]更新您的代码吗?请查看此问题。请更新此奇妙的代码以涵盖时区。
NSArray *notifications = @[notif1, notif2, notif3];

NSDate *now = [NSDate date];
NSArray *sorted = [notifications sortedArrayUsingComparator:^NSComparisonResult(UILocalNotification *obj1, UILocalNotification *obj2) {
    NSDate *next1 = [obj1 myNextFireDateAfterDate:now];
    NSDate *next2 = [obj2 myNextFireDateAfterDate:now];
    return [next1 compare:next2];
}];