更新UITabBarItem中的徽章编号

时间:2013-11-18 19:52:11

标签: ios push-notification uitabbaritem

我正在开发一款管理推送通知的iOS应用。当推送出现时,应用程序徽章看起来很好,但是我遇到问题的地方是应用程序内部出现的徽章。在应用程序内部,我的意思是应用程序管理的UITabBarItems。

该应用程序有一个TabBarController,其中两个UITabBarItems徽章必须增加,具体取决于推送通知出现。这是在服务器端正确处理的,因为我进行了调试并且推送徽章编号正常。问题是标签栏项目没有更新。

以下是我的代码的一部分:

这一切都发生在de AppDelegate.m

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
   NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
   NSString *user = [defaults stringForKey:@"id"];
   if (user){
       UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
       UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"tabbar"];
       self.window.rootViewController= viewController;
   }

   return YES;
}

这是我处理推送并更新uitabbaritem徽章的地方:

-(void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

   // Notify UAInbox to fetch any new messages if the notification
   // contains a rich application page id.
   if (application.applicationState != UIApplicationStateBackground) {
       UA_LINFO(@"Received remote notification: %@", userInfo);
        [[NSNotificationCenter defaultCenter] postNotificationName:@"refreshRequests" object:nil];
        NSString* type = [userInfo objectForKey:@"type"];
       if ([type isEqualToString:@"s"]){
           [[[[(UITabBarController*)self.window.rootViewController viewControllers]
           objectAtIndex: 2] tabBarItem] setBadgeValue:[[userInfo objectForKey:@"particularBadge"] stringValue]];
       }else{
           [[[[(UITabBarController*)self.window.rootViewController viewControllers]
           objectAtIndex: 0] tabBarItem] setBadgeValue:[[userInfo objectForKey:@"particularBadge"] stringValue]];
       }

   }else{
       // Notify UAPush that a push came in with the completion handler
       [[UAPush shared] handleNotification:userInfo
                       applicationState:application.applicationState
                 fetchCompletionHandler:completionHandler];

   }

   [[NSNotificationCenter defaultCenter] postNotificationName:@"refreshRequests" object:nil];
   [self clearNotifications];
}

当我调试它时,[[userInfo objectForKey:@“specialBadge”] stringValue]中的徽章例如为1,但是当代码完成传递时,uitabbaritem不会更新。有时它可以正常工作,但有些则没有,我无法弄清楚原因。

当应用程序启动时询问用户是否已登录..如果不是self.window.rootviewController是LoginViewController。我不知道这些信息是否重要。

任何帮助将不胜感激!

0 个答案:

没有答案