2012-06-18 40 views
3

我有一个UILocalNotification设置为从2012-06-18 10:00开始,重复间隔为1分钟。找出何时重复UILocalNotification被触发

2012-06-18 10:05 5通知将被触发。用户然后选择通知号码3.通知应该已经在2012-06-18 10:02被解雇。

在我的- application:didReceiveLocalNotification:方法。我该如何从编号为3的通知编程式中获取此火灾日期,该通知应为2012-06-18 10:02。我知道我可以从UILocalNotification获得intitial/start fireDate属性,但我对此不感兴趣。我很想知道这个的fireDate重复通知(不是intial/start fireDate)。

如果有人能向我解释如何找出重复UILocalNotification未经解析通知的- description我会给你一些我辛苦赚来的赏金解雇。

+0

我不认为这是真的可能,因为所有的信息传递(即使在userInfo字典)之前配置。所以我不认为这是为了这个目的。但我可能是错的,只是谈论我的经验。 – Pochi

+0

我不认为这是可能的。从文档中注意到的一点是,每个重复性通知不是一个不同的通知,它是相同的通知再次重新安排在另一次。 – jhabbott

回答

1

所以我给了这个更多的想法,正如我在我的评论中所说,由于处理通知的方式似乎不可能。

您创建一个并立即触发或安排它。

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

应用程序通过

application:didReceiveLocalNotification: 

接收该通知在只UILocalNotification本身被传递。此通知仅包含一组在开始时设置的属性。

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

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

(子类也不会有用,因为这里https://stackoverflow.com/a/8583329/1068522解释)

+0

因此,似乎我唯一的选择是解析'UILocalNotification'的'-description'?如果Apple决定更改'UILocalNotification'的'-description'方法,如何确保我的应用程序仍能正常工作? –

+0

这将以你解析描述的方式进行,理想情况下,你想寻找一些“看起来像”被激发的关键字,并采取任何前面的值。所有这些都是用NSString便捷方法和NSScaner实现的,实际上有几种方法。你介意发布2或3个NSlog这些预定通知的描述吗? – Pochi

+0

下面是它们的样子:' {fire date = 2010-11-29 03:53:52 GMT,time zone = America/Denver(MST)offset -25200,repeat interval = 16,next fire date = 2010-11-30 03:53:52 GMT}' –

1

获取UILocalNotification FireDate的最佳替代解决方案是计算日期。
考虑到您有一个初始fireDate,您可以使用重复间隔来计算给定通知的fireDate。

1.启动与初期火灾日期
2.注册你有
3.Multiply重复间隔由索引,并将其添加到您的初期火灾日期通知的通知数/指数

但是,如下面的链接所述,日期计算由于时区和“其他讨厌的东西”而很棘手。
这里是一个有用的链接:
How to grab the NEXT fire date from a UILocalNotification object

当然,还有就是最后,回落解析description方法的解决方案。使用[notification.fireDate description]但是,正如您可能知道的那样,这样做不是一个好主意,因为格式可能会在将来发生更改,从而破坏您的代码。

希望这有助于!

编辑: 例子:好了,所以说我的第一个初始fireDate为2012-06-18 10:00
我知道我重复间隔是每隔一分钟,好吗?
所以说,用户点击uilocalnotification号码3,那意味着两分钟应该已经过去了!
因此,具体通知的时间为:2012-06-18 10:02
这是否有意义?

+0

我很抱歉,但我不认为你理解我的问题。我知道如何使用'repeatInterval'来计算未来的日期,但那不是我的问题。我的问题是我如何唯一标识用户选择查看/打开哪个重复的'UILocalNotification'。但是,谢谢你试图给我一个答案:) –

+0

你能得到一个特定通知的通知号码吗?请看看我的编辑!谢谢! – wayway

+0

是的,这是有道理的,这就是我在我的问题中写的基本。但你仍然没有回答我的问题;) –

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与另一个(除了地址在内存中)。 Next fireDate根据当前时间进行计算。

相关问题