Swift通过Segue将数据发送到ViewController问题

时间:2017-06-29 22:35:10

标签: ios xcode swift3 uistoryboardsegue

我无法尝试将数据发送到第二个viewcontroller。更具体地说,我正在解析一个网站并将特定元素放入一个对象中。从那里我试图将响应发送到另一个视图控制器。我已经在应用程序中完成了一次,但我不确定这次我做错了什么。

VC1:

override func prepare(for segue: UIStoryboardSegue, sender: Any!) {
        guard let assignments = sender as AnyObject as? [Assignment],

            let sendMe = segue.destination as? ClassTableViewController
            else { return }

        sendMe.myAssignments = assignments

    }
    let classResponse = try ClassParser(innerHTML)
                self.performSegue(withIdentifier: "ShowClass", sender: classResponse.classAssignments) //segue to ClassTableViewController

ClassTableViewController使用该对象显示更多信息。但是,错误不断返回unexpectedly found nil while unwrapping an Optional value.,这意味着对象内容未正确发送。 ClassTableViewController:

class ClassTableViewController: HeaderViewController {

    @IBOutlet weak var classTableView: UITableView!

    var myAssignments: [Assignment]!
    override func viewDidLoad() {



    }



}
    extension ClassTableViewController: UITableViewDataSource, UITableViewDelegate  {

     func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return myAssignments.count //ERROR HERE. The variable is empty
    }
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "ClassViewCell", for: indexPath)// as! NineWeekCellTableViewCell
        cell.textLabel?.text = myAssignments[indexPath.row].name
      cell.detailTextLabel?.text = myAssignments[indexPath.row].grade
        return cell
    }


}

2 个答案:

答案 0 :(得分:0)

您的错误发生是因为您强制展开可选对象并且恰好是nil。在您的代码中,您唯一可以在prepareForSegue方法中强制解包的地方,在强制解包后您将sender传递给prepareForSegue。首先,将您的override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard let assignments = sender as AnyObject as? [Assignment], let sendMe = segue.destination as? ClassTableViewController else { return } sendMe.myAssignments = assignments } 方法更改为:

classResponse.classAssignments

我怀疑你的self.performSegue(withIdentifier: "ShowClass", sender: classResponse.classAssignments)是零,所以当你打电话

x = Math.floor((x+99) / 100)*100;

你强制解开nil值并发生错误

答案 1 :(得分:0)

问题是有两个segue进入同一个视图控制器。删除了一个,变量成功通过。