我有一個後臺線程(NSOperation),用於爲用戶獲取新消息。這是通過AppDelegate中的定時器調用的。我有一個在MainThread上執行的方法,它應該在我的MessagesViewController中調用一個類方法。這一切工作(我有日誌報表顯示它是打在MessagesViewController類方法在MessagesViewController的方法做的只有一件事:從NSOperation線程更新UITabBar徽章圖標
-(void)updateMessageBadgeNumberWithStringVal:(NSString *)badgeNum {
[[[[self.tabBarController tabBar] items] objectAtIndex:2] setBadgeValue:badgeNum];
NSLog(@"updateMessageBadgeNumberWithStringVal Called val= %@", badgeNum);
}
日誌聲明火災,但BadgeValue不會改變。順便說一句,我使用的故事板,因此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的方法?
是的,PerformSelectorOnMainThread調用在更新UI的主線程上調用方法。這是不是這樣做的正確方法? –