我正在为应用实施用户身份验证系统。如果用户已登录,则会获得一组可用选项卡以供选择。如果他们没有登录,他们会得到另一个。现在我遇到的问题是,在用户登录后(app重定向到某些oauth的safari然后返回到应用程序),我更新了UITabBarController中的标签,如下所示:
private var accessibleViewControllers = [UIViewController]()
func setUpView() {
var viewControllersToSet = [UIViewController]()
if let user = theUser {
for controller in accessibleViewControllers {
if !(controller is LogInViewController) {
viewControllersToSet.append(controller)
}
}
} else {
for controller in accessibleViewControllers {
if controller is LogInViewController || controller is HomeNavigator {
viewControllersToSet.append(controller)
}
}
}
setViewControllers(viewControllersToSet, animated: false)
}
现在有趣的是,标签图标不会刷新,但我仍然可以点击新图标链接到相关视图的空间。如何刷新选项卡以显示正确的图标?
答案 0 :(得分:-1)
这是一个线程问题。我正在通过后台线程加载用户数据,然后从同一个后台线程调用委托方法setUpView
。为了解决这个问题,我把它放回主队列:
dispatch_async(dispatch_get_main_queue()) {
if self.accessibleViewControllers != nil {
var viewControllersToSet = [UIViewController]()
if let user = MediatedUser.shared {
for controller in self.accessibleViewControllers! {
if !(controller is LogInViewController) {
viewControllersToSet.append(controller)
}
}
} else {
for controller in self.accessibleViewControllers! {
if controller is LogInViewController || controller is HomeNavigator {
viewControllersToSet.append(controller)
}
}
}
self.viewControllers = viewControllersToSet
}
}