在通知回调中设置时,标签栏上没有出现徽章

时间:2017-07-28 17:49:25

标签: ios objective-c cocoa-touch uitabbar uitabbaritem

我试图将标签栏中的徽章设置为" 1"当我的应用收到通知时,在第四个选项卡上。奇怪的是,我的控制台说该方法正在解雇(参见NSLog" Fire!"),但是一旦收到通知,徽章就不会出现在我的标签栏项目上?我错过了什么吗?

AppDelegate.m

-(void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo 

    UIApplicationState state = [application applicationState];
    if (state == UIApplicationStateActive) {

        [[NSNotificationCenter defaultCenter] postNotificationName:@"pushNotification" object:nil userInfo:userInfo];

        NSLog(@"App notification received!");
        // do stuff when app is active

    }else{
        // do stuff when app is in background

        static int i=1;
        [UIApplication sharedApplication].applicationIconBadgeNumber = i++;

        NSLog(@"App notification received background!");
    }
}

ViewController.m

- (void) myNotificationReceived:(NSNotification *) notification {


    [[self.tabBarController.tabBar.items objectAtIndex:3] setBadgeValue:@"1"];


    NSLog(@"Fire!");
}


- (void)viewDidLoad {
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myNotificationReceived:) name:@"pushNotification" object:nil];

}

2 个答案:

答案 0 :(得分:0)

[[self.tabBarController.tabBar.items objectAtIndex:0] setBadgeValue:nil];将您的计数或数字设置为零,以便在标签栏上显示

试试这可能会对你有所帮助

答案 1 :(得分:0)

无需NSNotification方法 - 以下修复了 AppDelegate.m 中的问题:

-(void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo {

    UIApplicationState state = [application applicationState];
    if (state == UIApplicationStateActive) {

        [[NSNotificationCenter defaultCenter] postNotificationName:@"pushNotification" object:nil userInfo:userInfo];

        UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;
        [[tabController.viewControllers objectAtIndex:4] tabBarItem].badgeValue = @"1";


        NSLog(@"App notification received!");
        // do stuff when app is active

    }else{


        static int i=1;
        [UIApplication sharedApplication].applicationIconBadgeNumber = i++;

        //  NSLog(@"App notification received!");

        NSLog(@"App notification received background!");
    }
}