gpt4 book ai didi

ios - UILocalNotification 和 applicationIconBadgeNumber 的良好模式

转载 作者:技术小花猫 更新时间:2023-10-29 11:19:21 25 4
gpt4 key购买 nike

我的应用安排 UILocalNotifications 在用户选择的不同时间传送给它的用户。

我遇到了如何在这种情况下管理 applicationIconBadgeNumber 的情况。

我们知道,您必须在创建通知时设置角标(Badge)编号。我的问题是角标(Badge)数量的状态可以随时改变。考虑这种情况:

1) 用户收到 3 条通知。

2) 用户创建一个新的通知以在将来的给定时间点提醒她。此通知包含值 1 加上应用程序角标(Badge)的当前值 (3)。

3) 用户开始他们的业务。在他们的业务过程中,他们通过查看通知或以其他方式使用该应用程序清除了他们当前拥有的所有 3 个通知(以及角标(Badge)编号)。

4) 在给定的时间过去后,通知会出现在 iOS 中,连同它之前计算的值(4,如果你不记得了)。

5) 应用程序角标(Badge)现在是 4,即使用户只有一个实际通知。

我上下搜索过,但找不到这个问题的答案,这个问题几乎肯定有一个简单的答案,但我完全没有找到。我该如何解决这个难题?

最佳答案

由于您的应用无法展望 future ,也无法知道您将立即处理哪些事件,以及您将暂时“等待”处理哪些事件,因此可以使用一些技巧:

当通知由您的应用程序处理时(通过点击通知、图标等),您必须:

  1. 获取所有未决通知的副本
  2. “重新编号”这些未决通知的标志编号
  3. 删除所有待处理的通知
  4. 使用更正的角标(Badge)重新注册通知副本再次数字

此外,当您的应用注册新通知时,它必须先检查有多少通知待处理,然后使用 with 注册新通知:

badgeNbr = nbrOfPendingNotifications + 1;

看看我的代码,它会变得更清晰。我对此进行了测试,它确实有效:

在您的“registerLocalNotification”方法中,您应该这样做:

NSUInteger nextBadgeNumber = [[[UIApplication sharedApplication] scheduledLocalNotifications] count] + 1;
localNotification.applicationIconBadgeNumber = nextBadgeNumber;

当你处理通知(appDelegate)时,你应该调用下面的方法,它清除图标上的角标(Badge)并重新编号待处理通知的角标(Badge)(如果有的话)

请注意,下一个代码适用于“连续”注册事件。如果您要在未决事件之间“添加”事件,则必须先“重新排序”这些事件。我没有走那么远,但我认为这是可能的。

- (void)renumberBadgesOfPendingNotifications
{
// clear the badge on the icon
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

// first get a copy of all pending notifications (unfortunately you cannot 'modify' a pending notification)
NSArray *pendingNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications];

// if there are any pending notifications -> adjust their badge number
if (pendingNotifications.count != 0)
{
// clear all pending notifications
[[UIApplication sharedApplication] cancelAllLocalNotifications];

// the for loop will 'restore' the pending notifications, but with corrected badge numbers
// note : a more advanced method could 'sort' the notifications first !!!
NSUInteger badgeNbr = 1;

for (UILocalNotification *notification in pendingNotifications)
{
// modify the badgeNumber
notification.applicationIconBadgeNumber = badgeNbr++;

// schedule 'again'
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
}
}

感谢@Whassaahh

关于ios - UILocalNotification 和 applicationIconBadgeNumber 的良好模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20415078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com