2017-06-29 18 views
0

2番目のビューコントローラにデータを送信しようとして問題が発生しています。具体的には、私はウェブサイトを解析し、特定の要素をオブジェクトに入れています。そこから私は別のビューコントローラに応答を送信しようとしています。私はアプリでこれを一度やったことがあるが、今度は何が間違っているのか分からない。データを迅速に送信する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:オプションのオブジェクトをアンラップ力であり、それはnilであることを起こるので

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さて、上記の2番目のコントローラを追加しました – yzet00

答えて

0

あなたのエラーが発生します。あなたのコードから、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 
} 

私はあなたが

self.performSegue(withIdentifier: "ShowClass", sender: classResponse.classAssignments)

を呼び出すときにあなたの力がnil値との誤差が

+0

変更しましたが、同じエラーが表示されます。 – yzet00

+0

他のアイデアですか? – yzet00

+0

@ yzet00ああ、そうだ。では、準備セグの 'myAssignments'配列 –

0
を起こったアンラップ、あなたの classResponse.classAssignmentsがnilであると思われます

問題は、同じビューコントローラに2つのセグがあることでした。 1つを削除し、変数が正常に渡されました。

関連する問題