我搜索了很多但找不到答案,因此决定问你:)。
我有一个有一些意见的应用程序。登录后,我创建了一个带有 3 个选项卡的 UITabBarController。
现在我希望根据用户有多少通知来更改第二个选项卡的徽章。
这个核心在 viewdidload 方法中调用时起作用:
NSString *badgeValue = [NSString stringWithFormat:@"%i", [cacheNotifications count]];
if([cacheNotifications count] != 0){
[[[[[self tabBarController] viewControllers] objectAtIndex: 1] tabBarItem] setBadgeValue:badgeValue];
}
但是,我在后台运行了一个守护进程,它每 30 秒检查一次通知。如果我能改变这个守护进程的徽章,那就太好了。
当我这样称呼时:
PlatformViewController *theInstance = [[PlatformViewController alloc] init];
[theInstance updateNotificationsBadge];
它确实调用了该函数,但不更新徽章。有或没有 performSelectorOnMainThread。
更新通知徽章:
-(void) updateNotificationsBadge{
NSString *badgeValue = [NSString stringWithFormat:@"%i", [cacheNotifications count]];
NSLog(@"Length here is: %i", [cacheNotifications count]);
if([cacheNotifications count] > 0){
NSLog(@"call..");
[self performSelectorOnMainThread:@selector(setNotification:)
withObject:badgeValue
waitUntilDone:YES];
}
}
-(void)setNotification:(NSString*)badge{
NSLog(@"Called. %@", badge);
[[[[[self tabBarController] viewControllers] objectAtIndex: 1] tabBarItem] setBadgeValue:badge];
}
我该如何解决这个问题?
提前致谢!
编辑:
cacheNotifications 是在 globalVars.m 中声明的全局变量。当我调用新实例时,它不会重新初始化。
我从 daemonClass.m 调用下面的代码
PlatformViewController *theInstance = [[PlatformViewController alloc] init];
[theInstance updateNotificationsBadge];