我正在尝试从通知中心清除通知(其中的解决方法包括将徽章编号设置为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中有效。我将为此发布一个单独的问题
答案 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;它没有以任何方式使用负数。