2017-06-29 17 views
0

我无法将数据发送到第二个视图控制器。更具体地说,我解析一个网站,并将特定的元素放入一个对象中。从那里我试图将响应发送到另一个视图控制器。我在应用程序中已经做了一次,但是我不确定这次我做错了什么。Swift将数据通过Segue发送到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 
    } 


} 
+0

您的错误不会发生在这些代码行中。请发布错误发生的代码 –

+0

@FangmingNing好吧,我添加了第二个控制器上面 – yzet00

回答

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)

你力拆开零值和错误happend

+0

我改变了它,但仍然得到相同的错误。 – yzet00

+0

任何其他想法? – yzet00

+0

@ yzet00哦,我明白了。那么你在准备阶段将数据添加到你的'myAssignments'数组 –

0

问题是有两个赛段进入同一个视图控制器。删除一个,并成功传递变量。

相关问题