質問: UserDefaults.standard.object (forKey: "kagi") as! [String]} print("didSelectRowAt/selectedtext: \(selectedtext)") } } ``` tretを選んだときに出力されたものです。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/785417a0c2050475a27a5581ca263df9.png) ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/b6323f0ccc209cf684af84b4c68f0d60.png) すみません、これでどうでしょうか。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/85753109133acb791fb9eb8032f01a41.png) segueの詳細です。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/c8baa2226f7b884b3fafefe2c51a8fba.png) ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/3e192681d8ecc208a5608f2a689717a1.png) 追記です ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/45ac7778eb23db97b57f7538a02c3bad.png) ・unsegueを使って「戻る」仕様にしました ・条件分岐をつけて2画面に分けました いろいろ試行錯誤してみましたが「作成」はできても「編集」というのは難しいように感じています。 アプローチを変えてrealmを使おうかと考えています。他にいい案ありましたら教えて下さい。
回答: エラーが出てる部分の、watasi.watasitext = selectedtext!の最後の!を削除して実行したらどうなりますか? 追記 矢印が多いのと、両画面ともmodalなのは意図してやってることですか? 参考にされてるページも...ですが、参考にされてるページとだいぶ違っているように見えますよ。 3つのメソッド内で変数の値を調べて、コンソールに表示される文字を教えて下さい。 そのあと、"あああ"と打ったらうまくいくという方法で同じことを行って、結果を教えて下さい。 ``` //選んだセルの特定と画面遷移 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { selectedtext = nikkinaiyou[indexPath.row] print("didSelectRowAt/selectedtext: \(selectedtext)" // <= 追加して performSegue(withIdentifier: "edit", sender: nil) } //画面遷移後に値渡しを行う override func prepare(for segue: UIStoryboardSegue, sender: Any?) { print("prepare/selectedtext: \(selectedtext)" // <= 追加して let watasi:AddViewController = (segue.destination as? AddViewController)! watasi.watasitext = selectedtext! } class AddViewController: UIViewController { //画面を開いたときに起こるアクション override func viewDidLoad() { super.viewDidLoad() print("AddViewController/watasitext: \(watasitext)" // <= 追加して nikkiText.text = watasitext } } ``` 追記 矢印1本でもできますが、どうしても2本でやりたいなら↓のようにしたら? セグエの矢印には別々のidentifierを設定してください。 セルからVCに矢印を貼るとdidSelect内のコードが動く前に遷移します。 ``` //選んだセルの特定と画面遷移 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let str: = nikkinaiyou[indexPath.row] // identifierが"edit"のセグエの矢印を実行する performSegue(withIdentifier: "edit", sender: str) } //画面遷移後に値渡しを行う override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "edit" { // identifierが"edit"のセグエの矢印を実行する場合のみ値を遷移先にわたす。 let str: String? = sender as? String let vc = segue.destination as? AddViewController vc?. watasitext = str } } ``` 戻ってくる処理はいまのままだと無限ぐるぐるになってるので、unwindSegueで設定し直してください。 storyBoard上の戻ってくる矢印は不要です。 古いけどなんとかなるでしょ また、遷移先で一つのボタンで編集と新規作成行う(戻る処理)ようですが、このままだとプログラムがどちらの処理なのかわからないので、そのへんを切り分ける処理も必要になります。 もう用意してあればいいですが。 追記 面倒なので、適当に作ったの置いときます。参考にでもしてみてください。 gitHub これができないのに新しいものに手を出してなにかできるとは思えませんが...。