首页 > 解决方案 > 如何在警报中允许位置权限时显示 TableViewController?

问题描述

我的故事板流程是:

LaunchScreen-> LoginViewController-> LocationPermissionViewController-> TabbarController-> NavigationController-> RestaurantsTableViewController-> DetailViewController

用户登录后,当用户单击Allow权限警报中的选项时,应显示应用程序RestaurantsViewController在标签栏控制器和导航控制器中。问题是用户单击Allow警报、导航和选项卡中的选项,shown但表格视图是not show

rootViewController允许后我尝试制作标签栏。但是正如我所说的导航和标签栏还可以,但是表格视图数据没有显示出来。

这是关于我的问题的屏幕录制链接:
youtube.com/watch ?v=05Jumd4Bm6Q&feature=youtu.be

表视图数据正在加载到此函数中,该函数位于AppDelegate.

private func loadBusinesses(with coordinate: CLLocationCoordinate2D) {
    service.request(.search(lat: coordinate.latitude, long: coordinate.longitude)) { [weak self]
        (result) in
        guard let strongSelf = self else { return }
        switch result {
        case .success(let response):
            let root = try? strongSelf.jsonDecoder.decode(Root.self, from: response.data)
            let viewModels = root?.businesses
                .compactMap(RestaurantListViewModel.init)
                .sorted(by: { $0.distance < $1.distance })
            if let nav = strongSelf.window.rootViewController as? UINavigationController,
                let restaurantListViewController = nav.topViewController as? RestaurantTableViewController {
                restaurantListViewController.viewModels = viewModels ?? []
                //When Allow option tapped in location permission alert
            } else {
            let tab = strongSelf.storyboard
                .instantiateViewController(withIdentifier: "TabbarController") as! UITabBarController
                let appDelegate = AppDelegate.shared
                appDelegate.window.rootViewController = tab
                let restaurantTableViewController = self!.storyboard.instantiateViewController(withIdentifier: "RestaurantTableViewController") as? RestaurantTableViewController
                tab.viewControllers = [restaurantTableViewController] as! [UIViewController]
            }
        case .failure(let error):
            print ("Error: \(error)")
        } 
    }
}

如果else我把这些代码块放在块中,tableView 显示它是数据。

{
strongSelf.navigationController = nav
strongSelf.window.rootViewController?.present(nav, animated: true)   {
(nav.topViewController as? RestaurantTableViewController)?.delegate = self
                    (nav.topViewController as? RestaurantTableViewController)?.viewModels = viewModels ?? []                    }
}

我没有收到任何错误。预期结果是用户应该RestaurantsTableViewController在点击允许按钮后看到。

标签: iosswiftuinavigationcontrolleruitabbarcontrollercore-location

解决方案


推荐阅读