tableView
で選択された行に基づいて、あるviewControllerから別のviewControllerに配列の情報を渡したいとします。これを行うために、私は次のような機能を実装している:indexPathForSelectedRowのためにsegueがnilを返すように準備しますか?
func tableView(_ messagesListTableView: UITableView, didSelectRowAt indexPath: IndexPath) {
messagesListTableView.deselectRow(at: indexPath, animated: true)
performSegue(withIdentifier: "individualMessageSegue", sender: self)
print(indexPath)//returns [0,0]... meaning the first row
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard segue.identifier == "individualMessageSegue" else{return}
if let indexPath = self.messagesListTableView.indexPathForSelectedRow{
let openedMessageConversation = fullOrderedMessageArray[(indexPath.row)] //cause app to crash because nil value
let destViewController: IndividualMessageVC = segue.destination as! IndividualMessageVC
destViewController.messageConvo = openedMessageConversation
}else{
print("it was nil")
}
}
私はすべてが正しく設定されていると信じて、しかし、いつものindexPath
[0,0](中の値を返すdidSelectRowAt
からprint文にもかかわらず、テーブルは1つのセクションと1つの行だけです)、prepare
のprintステートメントは、常にindexPath
がnil
であることを通知します。 if let
を削除すると、fullOrderedMessageArray[(indexPath.row)]
にはnil値が含まれているため、アプリがクラッシュします。私はなぜそれが他のものではない一方の関数のためにnilを返され続けるのか分かりません。
@ SergeyGamayunovを実行すると、「メソッドはスーパークラスのメソッドをオーバーライドしない」というエラーが表示されます –