setApplicationIconBadgeNumber没有任何效果

时间:2012-05-24 22:26:04

标签: ios

我正在尝试从通知中心清除通知(其中的解决方法包括将徽章编号设置为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 个答案:

答案 0 :(得分:10)

如果您在iOS8 +中无法正常工作setApplicationIconBadgeNumber,那是因为您必须要求用户获得从iOS8开始的本地通知的权限:

UIUserNotificationType userNotificationTypes = UIUserNotificationTypeBadge;
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil];
[application registerUserNotificationSettings:settings];

答案 1 :(得分:2)

您可以尝试逐个递增和递减徽章编号。

[UIApplication sharedApplication].applicationIconBadgeNumber++;    

虽然,我怀疑你的问题更多的是你的程序何时进入这行代码。

希望这会有所帮助。

答案 2 :(得分:2)

我也遇到过这个问题。

在您的设备上测试时,下面的行是正确的电话:

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 5];

它被调用的地方虽然重要。如果您只在以下位置调用它:

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

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

- (void)applicationDidBecomeActive:(UIApplication *)application 

希望有所帮助。

答案 3 :(得分:0)

我刚发现它必须是一个数字&gt;它没有以任何方式使用负数。