更改 viewControllers 后如何刷新 UITabBar

How to refresh UITabBar after changing viewControllers

我正在为应用程序实施用户身份验证系统。如果用户登录,他们将获得一组可用的选项卡 select。如果他们没有登录,他们会得到另一个。现在我 运行 遇到的问题是,在用户登录后(应用程序重定向到 safari 到一些 oauth 内容,然后 returns 到应用程序),我从 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)
}

现在有趣的是,选项卡图标没有刷新,但我仍然可以单击新图标所在的空间 link 到相关视图。如何刷新选项卡以便显示正确的图标?

这是一个线程问题。我通过后台线程加载用户数据,然后从同一个后台线程调用委托方法 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
        }
    }