我正在开发一款管理推送通知的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。我不知道这些信息是否重要。
任何帮助将不胜感激!