Я пытаюсь передать переменную через несколько разных классов для использования в основных данных (отношения один ко многим).

Чтобы дать некоторый контекст того, что происходит. У меня есть tableViewController (jobs), когда пользователь нажимает на одну из ячеек, он переносит их на tabBarController с 4 viewController. Затем на первом viewController находится tableView, если пользователь щелкает определенную ячейку, он переводит их на другой tabBarController. Я пытаюсь передать переменную

var job: Работа?

С верхнего уровня на последний tabBarController, но кажется, что он теряется при попытке передать переменную из первого TabBarcontroller во второй tabBarController. Я изо всех сил пытаюсь понять, что не так, если не передать переменную через ViewControllers.

Вот каждая из переменных ViewControllers и то, как я их передаю:

JobViewController:

var jobs = [Job]()

// CELL DID SELECT ROW
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let jobTab = jobTabController()
        jobTab.job = jobs[indexPath.row]
        show(jobTab, sender: self)
    }

Это первый tabBarController - jobTabController:

var job: Job?

Это первый ViewController, который прикреплен к jobTabController - jobInfo:

// OBSERVE JOB
var job: Job? {
    let tabBarController = self.tabBarController as! jobTabController
    return tabBarController.job
}

    // CELL DID SELECT ROW
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if indexPath.section == 1 {
            if indexPath.row == 1 {
                let camLens = cameraLensesTabController()
                camLens.job = self.job
                show(camLens, sender: self)
            }
        }
    }

ПРИМЕЧАНИЕ. Здесь переменная, кажется, теряется - между jobInfo и cameraLensesTabController - имя: cameraLensesTabController

var job: Job?

Тогда это мой viewController, который прикреплен к cameraLensesTabController - cameraController:

var job: Job?

@IBAction func HandleAddCamera(sender : UIButton) {
        let newCamera = newCameraController()
        newCamera.job = self.job
        let navController = UINavigationController(rootViewController: newCamera)
        present(navController, animated: true, completion: nil)
    }

На cameraController у меня есть кнопка добавления, которая переводит вас к другому ViewController с именем newCameraController , где вы можете добавлять элементы в tableView на cameraController:

var job: Job?
0
spoax 1 Май 2018 в 17:23

1 ответ

Лучший ответ

В контроллере jobInfo вы получаете доступ к var job через tabBarController.job. Но в cameraLensesTabController у вас есть var Job?, который, очевидно, инициализирован как nil, как в cameraController.
Вы ожидали, что эти два контроллера могут получить доступ к исходному значению tabBarController.job? Судя по всему, вы никогда им его не пересылали.

РЕДАКТИРОВАТЬ:

Когда viewController выполняет переход (т. Е. Переключается) на другой, он сначала вызывает prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender или его эквивалент в Swift. В этой функции вы можете получить доступ к целевому viewController и установить там свойства, см. https://stackoverflow.com/a/7865100/1987726.

РЕДАКТИРОВАТЬ 2:

В любом случае вызывается метод prepareForSegue:sender:. Найдите Программно выполнить переход и передать параметры в целевое представление.

1
Reinhard Männer 1 Май 2018 в 15:42