当Tab Bar不是根视图控制器时,无法在App Delegate中更改UITabBarController徽章

时间:2015-07-27 19:26:29

标签: ios objective-c

每次调用以下方法时,我都希望在标签栏上显示徽章值。 NSLog出现在控制台中,因此该方法可以正常工作,但无论如何都不会出现标签栏徽章。我做错了吗?或者这部分应该是好的,我错过了其他地方的东西?

// AppDelegate.m

- (void)pubnubClient:(PubNub *)client didReceiveMessage:(PNMessage *)message {

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    UINavigationController *tabBarController = [storyboard instantiateViewControllerWithIdentifier:@"tab"];

    UITabBarController *tabController = (UITabBarController *)tabBarController;

    [[tabController.viewControllers objectAtIndex:0] tabBarItem].badgeValue = @"1";

    NSLog(@"SHOW BADGE");

}

1 个答案:

答案 0 :(得分:1)

UINavigationController *tabBarController = [storyboard instantiateViewControllerWithIdentifier:@"tab"];
UITabBarController *tabController = (UITabBarController *)tabBarController;

这一行(除了奇怪的多重转换)实例化一个 new 标签栏控制器,它不会返回对现有标签栏的引用。您应该保留对现有标签栏控制器的引用,而不是创建新的标签栏控制器。

根据您的设置,您可以使用以下代码:

UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;