Передача переменной через классы - PullRequest
0 голосов
/ 01 мая 2018

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

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

var job: 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)
    }

Это первая вкладка BarController - 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?

1 Ответ

0 голосов
/ 01 мая 2018

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

EDIT:

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

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

Метод prepareForSegue:sender: вызывается в любом случае. Пожалуйста, посмотрите Выполните Segue программно и передайте параметры в представление назначения .

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