3

我有一个UILocalNotification设置为以2012-06-18 10:001 分钟的重复间隔开始。

2012-06-18 10:055 通知将被触发。然后,用户将选择通知编号 3。该通知应在 触发2012-06-18 10:02

在我的- application:didReceiveLocalNotification:方法中。我怎样才能以编程方式从通知号 3 中获取此触发日期,这应该是2012-06-18 10:02. 我知道我可以从中获取初始/启动 fireDate 属性,UILocalNotification但我对此不感兴趣。我很想知道这个重复通知的触发日期(不是初始/开始触发日期)。

UILocalNotification如果有人可以向我解释如何在不解析通知的情况下找出哪个重复被解雇- description,我会给你一些我来之不易的赏金。

4

3 回答 3

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
我知道我的重复间隔是每 ONE 分钟,对吗?
比如说,用户点击 uilocalnotification number 3,那么这意味着应该已经过了两分钟!
因此,该特定通知的时间是:2012-06-18 10:02
这有意义吗?

于 2012-06-20T18:06:49.307 回答
1

因此,我对此进行了更多考虑,正如我在评论中所说,由于处理通知的方式,这似乎是不可能的。

您创建一个并立即启动或安排它。

通知只是一些信息的存储,这意味着它仅用于读取其属性。

应用程序通过接收通知

application:didReceiveLocalNotification:

在其中仅传递UILocalNotification本身。这个通知只有一堆在开始时设置的属性。

重复间隔仅用于重新通知用户,它不会改变通知里面的内容。

由此得出的结论是,对于您希望实现的行为,如果您希望传递不同的信息或执行不同的操作,则必须触发不同的通知。

(子分类也没有用,如此处所述https://stackoverflow.com/a/8583329/1068522

于 2012-06-21T04:22:39.540 回答
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不解析的情况下获得“下一个开火日期”?

A:这有私有/未记录的功能:nextFireDateForLastFireDate

- (void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    NSLog(@"next: %@", [notification nextFireDateForLastFireDate:[NSDate date]]);
}

问:也许通知中有某种计数?属性还是方法?

A:有无证属性:

@property (assign, nonatomic) int totalRepeatCount;
@property (assign, nonatomic) int remainingRepeatCount;

但它们似乎总是具有相同的价值:UILocalNotificationInfiniteRepeatCount. 它们都由操作系统管理,因此覆盖此属性或底层实例变量不会执行任何操作。此外,从触发到触发,UILocalNotifications内部没有任何变化,无法区分一个 UILocalNotification 与另一个(内存中的地址除外)。Next fireDate根据当前时间计算。

于 2012-06-21T10:51:27.533 回答