我无法尝试将数据发送到第二个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)
您的错误发生是因为您强制展开可选对象并且恰好是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进入同一个视图控制器。删除了一个,变量成功通过。