Как я могу передать данные, загруженные, когда мое приложение завершило запуск через мой UITabBar, в UITableView? - PullRequest
0 голосов
/ 07 января 2019

Я новый программист iOS и пытаюсь создать приложение, которое включает следующий поток:

-> UITabBar -> UINavController -> UITableViewController.

Изначально программа работала, когда у меня был следующий поток:

-> UINavController -> UITableViewController

Но когда я добавил UITabBar (с помощью метода Embed In), у меня возникли две проблемы:

1) Преобразование начального представления из UITableView в UITabBarView. 2) Данные, которые были восстановлены из Архива телефона, не загружаются в TableView.

Мне удалось устранить проблему приведения с идентификаторами UIStoryboard, но я не уверен, что таким образом я создал вторую проблему, заключающуюся в неправильной передаче данных в UITableView.

Проблема приведения произошла в коде appDelegate. Вот оригинальный код, который у меня был до включения UITabBarView:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

let navController = window!.rootViewController as! UINavigationController

let SLBprojectController = navController.topViewController as! GR8TableView

SLBprojectController.SLBprojectDB = thisSLBprojectDB

return true
}

Проблема с вышеприведенным кодом заключалась в том, что он сказал мне, что не может преобразовать TableViewController (GR8TableView) в UITabBarView. Мне удалось это исправить, выполнив поиск по форумам StackOverflow, выполнив следующее:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

let tabBarIntial : UITabBarController = mainStoryboardIpad.instantiateViewController(withIdentifier: "TabBar") as! UITabBarController

let navigationController:UINavigationController = mainStoryboardIpad.instantiateViewController(withIdentifier: "navController") as! UINavigationController

let navigationController1:UIViewController = mainStoryboardIpad.instantiateViewController(withIdentifier: "ViewController1")

let SLBprojectController = navigationController.topViewController as! GR8TableView

SLBprojectController.SLBprojectDB = thisSLBprojectDB

tabBarIntial.viewControllers = [navigationController, navigationController1]

tabBarIntial.selectedIndex = 0

return true

}

Но после того, как я исправил проблему «приведения», у меня возникли проблемы с загрузкой данных в TableView. Не уверен, что эта проблема связана с тем, как я исправил проблему с кастингом.

Любая помощь будет высоко ценится!

1 Ответ

0 голосов
/ 08 января 2019

Самый простой ответ - вернуться к логике, похожей на ту, которая работала для вас, но с чуть более сложными отношениями. Например, я создал приложение с контроллером панели вкладок, контроллером навигации на первой вкладке и FirstViewController, встроенным в контроллер навигации.

Поскольку у меня нет базы данных, я дал FirstViewController переменную одного экземпляра с именем running.

Следующий код находит контроллер и устанавливает переменную:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    if let tabController = window!.rootViewController as? UITabBarController {
        if let navController = tabController.viewControllers![0] as? UINavigationController {
            if let firstController = navController.topViewController as? FirstViewController {
                firstController.running = true
            } else {
                print("Unexpected controller in navigation hierarchy: \(String(describing: navController.topViewController))")
            }
        } else {
            print("Unexpected contained controller: \(String(describing: tabController.viewControllers![0]))")
        }
    } else {
        print("Unexpected root controller: \(String(describing: window!.rootViewController))")
    }
    return true
}

Обратите внимание, что я не создаю никаких новых контроллеров. Это все сделано по умолчанию при загрузке раскадровки.

Полагаю, вы сможете адаптировать это к своим собственным переменным и именам классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...