找出何时触发重复的UILocalNotification

时间:2012-06-18 08:20:40

标签: ios uilocalnotification

我的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,我会给你一些我辛苦赚来的赏金。

3 个答案:

答案 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 是根据当前时间计算的。