通过类传递变量

时间:2018-05-01 14:23:38

标签: ios swift

我试图通过几个不同的类传递一个变量来用于核心数据(一对多关系)。

提供正在发生的事情的背景。我有一个tableViewController(jobs),当用户点击其中一个单元格时,它将它们带到带有4个viewControllers的tabBarController。然后在第一个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)
    }

这是第一个tabBarController - jobTabController:

var job: Job?

这是第一个附加到jobTabController的ViewController - 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和amp;之间。 cameraLensesTabController - name: 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上我有一个添加按钮,可以将你带到另一个名为 newCameraController 的ViewController,你可以在cameraController上的tableView中添加项目:

var job: Job?

1 个答案:

答案 0 :(得分:1)

jobInfo控制器中,您可以通过var job访问tabBarController.job。但是在cameraLensesTabController中,您的var Job?明显初始化为nil,就像cameraController一样。 您是否期望这两个控制器可以访问tabBarController.job的原始值?显然,你从来没有把它转发给他们。

编辑:

当viewController执行segue(即切换到)到另一个时,它首先调用prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender或其Swift等价。在此函数中,您可以访问目标viewController并在那里设置属性,请参阅https://stackoverflow.com/a/7865100/1987726

编辑2:

在任何情况下都会调用prepareForSegue:sender:方法。请查看Perform Segue programmatically and pass parameters to the destination view