Swift Firebase在封闭内发送数据

时间:2017-05-10 10:23:28

标签: swift firebase swift3 firebase-realtime-database swift2

我正在尝试将数据发送到另一个视图控制器。但是,在第二个视图控制器上无法访问数据。这是我的代码:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    super.prepare(for: segue, sender: sender)


    switch(segue.identifier ?? "") {

    case "tograddetail":
        print("Going to Grad Detail")


        guard let gradDetailViewController = segue.destination as? graduatedetailViewController else {
            fatalError("Unexpected destination: \(segue.destination)")
        }

        guard let selectedgradCell = sender as? GradTableViewCell else {
            fatalError("Unexpected sender: \(sender)")
        }

        guard let indexPath = tableView.indexPath(for: selectedgradCell) else {
            fatalError("The selected cell is not being displayed by the table")
        }


        ref = FIRDatabase.database().reference().child("Database")
        ref.observe(FIRDataEventType.value, with: { (snapshot) in

            //print(snapshot.value)
            if snapshot.exists() {
                if let countdowntime = snapshot.value as? NSDictionary {

                    let selectedgrad = self.graduatename[indexPath.row]

                    if let graddata = countdowntime[selectedgrad] as? NSDictionary {

                        let theinstitution = graddata["Institution"] as! String
                        let thelocation = graddata["location"] as! String
                        let thetimeleft = graddata["timeleft"] as! Int

                        guard let firstgrad = graddetail(institution: theinstitution, location: thelocation, timeleft: thetimeleft) else {
                            fatalError("Unable to instantiate graddetail")
                        }
                        //print(firstgrad.institution)

                        //print(destinationgraddata.grad?.institution)



                        let destinationVC = segue.destination as! graduatedetailViewController
                        destinationVC.grad = firstgrad


                    }

                }
            }
        })

    default:
        fatalError("Unexpected Segue Identifier; \(segue.identifier)")
    }
}

这是第二个视图控制器的代码:

var grad: graddetail?

@IBOutlet weak var theinstitution: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()

    if let grad = grad {

        theinstitution.text = grad.institution

    }
}

但是,grad.institution值总是返回nil。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

问题是observe(_:with:) isync和segue将同步调用,因此当您在observe的完成块中得到响应时,您的segue已经执行。

要解决此问题,您需要执行的操作是在致电observe之前调用performSegue并在observe的完成区内调用perfromSegue使用您想要传递的值。