【发布时间】:2012-04-26 21:09:47
【问题描述】:
我正在开发一个项目,该项目每天在与预定义数据库不同的时间通知用户,准确地说是一天五次。
我的问题是如何安排这些时间,5times*365days = 1825 开火日期!是否可以全部安排?
任何想法将不胜感激
【问题讨论】:
-
你将如何在后台处理本地通知你知道吗?
标签: objective-c ios xcode uilocalnotification
我正在开发一个项目,该项目每天在与预定义数据库不同的时间通知用户,准确地说是一天五次。
我的问题是如何安排这些时间,5times*365days = 1825 开火日期!是否可以全部安排?
任何想法将不胜感激
【问题讨论】:
标签: objective-c ios xcode uilocalnotification
根据 Apple 文档:
一个应用程序只能有有限数量的预定通知;系统保持最快触发的 64 个通知(自动重新安排的通知计为单个通知)并丢弃其余的
我通过设置通知“队列”解决了这个问题。例如,在我的应用中,我有三种不同类型的通知,我们只说类型 A、B 和 C。
我将 A、B 和 C 通知安排在下个月,每次用户打开应用程序时,我都会检查剩余的通知数量。例如,如果不再有 A 通知,则应用会安排更多 A 通知等等。
我如何做到这一点?
每次我安排通知时,我都会使用userInfo 属性。我用一个名为type 的键和一个值设置了一个字典。
在我的应用委托中,我检查所有待处理的通知并计算每种类型的剩余通知数量。代码如下所示:
NSArray *scheduledNotifications = [UIApplication scheduledLocalNotifications];
NSUInteger AType, BType, CType;
for (UILocalNotification *notif in scheduledNotifications) {
//Classify notifications by type
NSUInteger notifType = [[notif.userInfo objectForKey:@"type"]integerValue];
if (notifType == 0) {
AType++;
}else if(notifType == 1){
BType++;
}else{
CType++;
}
}
如果任何类型的计数为零,则应用会安排更多通知。
最后,如果显示通知,例如,每天在同一时间显示,您可以使用 repeatInterval 属性 但是您不能创建自己的重复间隔,您只能使用重复NSCalendarUnit 中定义的间隔。
希望对你有帮助。
【讨论】:
carNotificationsDic 未使用,scheduledNotifications 未定义。为什么要分开 A、B、C 类型而不是按到期日对它们进行排序?
carNotificationsDic 不是必需的,它是我代码的一部分,但在这里不是必需的。 scheduledNotifications 是 UIApplication 的属性。
您可以尝试使用 Eventkit 框架,使用它可以添加提醒、事件、警报。
1)没有UILocalNotification那样的通知数量限制。
2) 使用事件套件,您可以添加基于时间和基于位置的事件。
3)您也不必担心隐私问题。
虽然 UILocalNotification 和 EventKit 本身就很强大..
注意:iOS 6 或更高版本适用于 EventKit 框架
您可以根据自己的需要选择哪一种。
以下链接将为您提供良好的开端
下面的图片将让您很好地了解 evenkit 是什么。
如果它适合您的需要,请使用 eventkit。
【讨论】: