質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

352閲覧

1つ前の画面のtextFieldに代入ができない

kyokio

総合スコア560

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/03/28 16:47

編集2020/03/28 17:40

Realmからデータを取ってきて前の画面のtextFieldに代入したい

Realmにからデータを取ってきて前の画面にもどる際に、前の画面のtextFieldに取ってきたデータの値を入れたいと考えています。

###エラー
cellをタップして前の画面に戻ろうとすると下記のエラーが表示されます
Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value

エラーの場所は下記の//の場所にあります。

AllClassesTableViewController

1override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 2 //セルの選択の解除 3 tableView.deselectRow(at: indexPath, animated: true) 4 let realm = try! Realm() 5 let allClasses = realm.objects(classModel.self) 6 performSegue(withIdentifier: "goBack", sender: allClasses[indexPath.row]) 7 8 let previousVC = DetailsTableViewController.self 9 10 } 11 12 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 13 if segue.identifier == "goBack"{ 14 if let previousVC = segue.destination as? DetailsTableViewController{ 15 let selectedClass = (sender as? classModel)! 16 print(selectedClass) 17 print(sender) 18 19 previousVC.subjectTextField.text = selectedClass.subjectName //ここにエラー 20 previousVC.roomTextField.text = selectedClass.roomNum 21 previousVC.termTextField.text = selectedClass.teacherName 22 previousVC.pointsTextField.text = selectedClass.points 23 previousVC.selected = true 24 } 25 } 26 }

試したこと

print(selectedClass)で見てみましたがしっかり値は入っていたので、previousVC.roomTextField.textnil関係の問題が発生していると考えられるのですが調べてもわかりませんでした。

分かる方教えていただけると幸いです。

###追記
イメージ説明
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/03/28 17:33

previousVC の subjectTextField が nil だと思うので、Storyboard で subjectTextField の接続を確認しましょう。
kyokio

2020/03/28 17:40

hoshi-takanoriさん 追記に画像を載せました。 接続はできていると思います。
kyokio

2020/03/28 18:02

hoshi-takanoriさん if文使ってsubjectTextFieldを調べたらnilになってました。 接続できているのになぜnilになるのでしょうか?
hoshi-takanori

2020/03/28 18:11 編集

あ、goBack という segue が unwind segue じゃなくて普通の segue だったら、元の画面に戻るのではなく、新しく DetailsTableViewController を作ってそれを開くことになります。その場合、prepare(for segue:) ではまだ view は作られてないので subjectTextField は nil になりますね。 unwind segue のやり方は以下の記事などを参考にしてください。 https://qiita.com/mst/items/2f5f6c7d24341b88f7df
kyokio

2020/03/29 14:37 編集

ありがとうございます。 画面に戻ることはできました。
guest

回答1

0

自己解決

普通のsegueだと戻るのではなく、新しくDetailsTableViewControllerを作るため、画面遷移前にDetailsTableViewControllertextFieldをいじろうと思ってもまだ存在しないためエラーが起きていた。また、画面の遷移も右から左にanimationが動くため戻った感じがしないから不適切だった。

unwind segueを使うとできた。
しかし、cellのタップ時に戻りたかったUIButtonなどにしかactionを起こさないから結局違うやり方でやることにした。
勉強になった。

hoshi-takanoriさん、ありがとうございました。

投稿2020/03/29 14:45

kyokio

総合スコア560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問