3

我正在尝试从通知中心清除通知(解决方法包括将徽章编号设置为 0,因为没有 api 可以删除它们)。

但是,在进行试验时,我注意到我无法让 setApplicationIconBadgeNumber 对徽章编号产生任何影响。

例如,如果我有:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
      [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 5];

(并且 setApplicationIconBadgeNumber 没有在其他任何地方被调用)

那么图标就没有徽章,更不用说包含数字的徽章了。

(通知没有设置徽章编号,也许在 setApplicationIconBadgeNumber 之前必须有一个徽章编号:有任何影响,有人可以确认或否认吗?)

更新:,我在控制台中注意到了这一点,也许与它有关:

May 24 16:12:49 unknown installd[138] <Error>: entitlement 'aps-environment' has value not permitted by a provisioning profile
May 24 16:12:49 unknown SpringBoard[51] <Warning>: Killing com.mycompany.xxx for termination assertion
May 24 16:12:50 unknown installd[138] <Error>: entitlement 'aps-environment' has value not permitted by a provisioning profile
May 24 16:12:50 unknown SpringBoard[51] <Warning>: Reloading application state for 'com.mycompany.xxx' as its modification date or path has changed
May 24 16:12:50 unknown SpringBoard[51] <Warning>: Reloading and rendering all application icons.

最后一行听起来很相关,这才刚刚开始发生,不知道为什么,我没有更改配置文件等,它们是最新的并且在 Xcode 中有效。我将为此发布一个单独的问题

4

4 回答 4

13

如果您setApplicationIconBadgeNumber无法在 iOS8+ 中工作,那是因为您必须向用户询问从 iOS8 开始的本地通知权限:

UIUserNotificationType userNotificationTypes = UIUserNotificationTypeBadge;
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil];
[application registerUserNotificationSettings:settings];
于 2015-09-04T20:18:19.863 回答
2

我也遇到过这个问题。

在您的设备上对其进行测试时,以下行是正确的调用:

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 5];

不过,它在哪里被调用很重要。如果你只调用它:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

只有在应用程序完全关闭时才会执行。在测试时,因为你经常进出它,应用程序可能只会进入后台并被暂停,在这种情况下也可以调用它:

- (void)applicationDidBecomeActive:(UIApplication *)application 

希望有帮助。

于 2013-05-11T20:33:53.030 回答
2

您可以尝试将徽章编号一一递增和递减。

[UIApplication sharedApplication].applicationIconBadgeNumber++;    

虽然,我怀疑您的问题更多是您的程序何时到达这行代码的问题。

希望这可以帮助。

于 2012-05-24T22:44:17.273 回答
0

我刚刚发现它必须是一个大于 0 的数字。它对负数没有任何作用。

于 2012-12-10T02:47:23.080 回答