gpt4 book ai didi

objective-c - 从 NSOperation 线程更新 UITabBar 角标(Badge)图标

转载 作者:行者123 更新时间:2023-11-29 04:53:09 25 4
gpt4 key购买 nike

我有一个后台线程(NSOperation),用于为用户获取新消息。这是通过 AppDelegate 中的计时器调用的。我有一个在 MainThread 上执行的方法,该方法应该调用 MessagesViewController 中的类方法。这一切都有效(我有日志语句显示它正在调用 MessagesViewController 中的类方法。MessagesViewController 中的方法只做了一件事:

-(void)updateMessageBadgeNumberWithStringVal:(NSString *)badgeNum {
[[[[self.tabBarController tabBar] items] objectAtIndex:2] setBadgeValue:badgeNum];
NSLog(@"updateMessageBadgeNumberWithStringVal Called val= %@", badgeNum);
}

日志语句会触发,但 BadgeValue 不会更改。顺便说一句,我正在使用 Storyboard,因此 TabBarController 不会在 AppDelegate 中实例化。

有什么想法吗?

编辑:在我的 NSOperation 类中,我正在这样做:

[self performSelectorOnMainThread:@selector(updateMessageBadgeNumberWithString:)    
withObject:badgeNum
waitUntilDone:NO];

该方法也存在于我的 NSoperation 类中:

-(void)updateMessageBadgeNumberWithString:(NSString *)badgeNum {
MessagesViewController *mvc = [[MessagesViewController alloc] init];

[mvc updateMessageBadgeNumberWithStringVal:badgeNum];
//mvc = nil;

}

那么这不是调用主线程更新UI的方法吗?

最佳答案

不要直接调用 updateMessageBadgeNumbeWithStringVal:,而是执行以下操作:

[self performSelectorOnMainThread:@selector(updateMessageBadgeNumbeWithStringVal:) withObject:badgeNum waitUntilDone:NO];

您不应在后台线程上更新 UI,而应仅在主线程上更新。

关于objective-c - 从 NSOperation 线程更新 UITabBar 角标(Badge)图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8482409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com