我的UILocalNotification
设置为从2012-06-18 10:00
开始,重复间隔为1分钟。
在2012-06-18 10:05
5时,系统会触发通知。然后,用户将选择通知编号3.通知应该在2012-06-18 10:02
处被触发。
在我的- application:didReceiveLocalNotification:
方法中。我如何以编程方式从通知编号3({1}}获取此触发日期。我知道我可以从2012-06-18 10:02
获取intitial / start fireDate属性,但我对此不感兴趣。我很想知道这个重复通知的fireDate(不是intial / start fireDate)。
如果有人可以向我解释如何在不解析通知的UILocalNotification
的情况下找出解雇的UILocalNotification
,我会给你一些我辛苦赚来的赏金。
答案 0 :(得分:1)
获取 UILocalNotification 的fireDate的最佳替代解决方案是计算日期。
鉴于您有一个初始的fireDate,您可以使用重复的间隔来计算给定通知的fireDate。
1.开始初始开火日期
2.获取您拥有的通知的通知编号/索引
3.将索引的重复间隔加倍,并将其添加到初始开火日期
然而,由于时区和“其他讨厌的事情”,如下面链接所述,日期计算很棘手。
这是一个有用的链接:
How to grab the NEXT fire date from a UILocalNotification object
当然,还有解析description
方法的最终后备解决方案。使用[notification.fireDate description]
然而,正如您可能知道的那样,这样做绝对不是一个好主意,因为格式化可能会在将来发生变化,从而破坏您的代码。
希望这有帮助!
修改强>
示例:好的,所以说我的第一个初始fireDate是2012-06-18 10:00
我知道我的重复间隔时间是每一分钟,对吗?
所以说,用户点击第3号uilocalnotification,那意味着两分钟应该已经过去了!
因此,该特定通知的时间是:2012-06-18 10:02
这有意义吗?
答案 1 :(得分:1)
所以我更多地考虑了这一点,正如我在评论中所说,由于处理通知的方式,它似乎不可能。
你创建一个并立即开火或安排它。
通知只是存储某些信息,这意味着只能读取其属性。
应用程序通过
接收通知application:didReceiveLocalNotification:
只传递UILocalNotification本身的地方。此通知仅包含一系列在开始时设置的属性。
重复间隔仅用于重新通知用户,它不会更改通知内容。
这得出的结论是,对于您期望实现的行为,如果您希望传递不同的信息或执行不同的操作,则必须触发不同的通知。
(如此处所解释的那样,子分类也没有用https://stackoverflow.com/a/8583329/1068522)
答案 2 :(得分:0)
问:强>
如果有人可以向我解释如何找出重复的内容 UILocalNotification在没有解析 - 的描述的情况下被解雇了 通知我会给你一些我辛苦赚来的赏金。
答:最简单的方法:
- (void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
NSDateComponents *comps = [[NSCalendar currentCalendar] components:notification.repeatInterval fromDate:notification.fireDate toDate:[NSDate date] options:0];
NSLog(@"Notification #%d", [comps minute] + 1);
}
问:如何在不解析的情况下从description
获取“下次开火日期”?
答:此处有私人/未记录的功能:nextFireDateForLastFireDate
- (void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
NSLog(@"next: %@", [notification nextFireDateForLastFireDate:[NSDate date]]);
}
问:也许通知中有某种计数?财产或方法?
答:有未记录的属性:
@property (assign, nonatomic) int totalRepeatCount;
@property (assign, nonatomic) int remainingRepeatCount;
但它们似乎总是具有相同的价值:UILocalNotificationInfiniteRepeatCount
。它们都由操作系统管理,因此覆盖此属性或基础实例变量不会执行任何操作。此外,内部没有任何变化 UILocalNotifications从触发到触发,没有办法区分一个UILocalNotification与另一个UILocalNotification(内存中的地址除外)。 下一个fireDate 是根据当前时间计算的。