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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Swift

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

Q&A

解決済

1回答

509閲覧

遷移先のContainerViewのViewに値を渡したい

ZY.

総合スコア22

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Swift

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

0グッド

0クリップ

投稿2020/06/28 12:01

前提・実現したいこと

遷移先のViewに値を渡したいと考えています。
遷移元のTableViewに配置されているViewをタップした時に画面遷移するように実装しています。
遷移先ViewではContainerViewを使い、親のViewと子Viewにそれぞれ同じ値を渡しすようにしたく、親のViewには値を渡すことができましたが、子Viewに値を渡すコードを書いてみたところ下記のエラーがでてしまいました。
解決方法教えていただけないでしょうか。
よろしくお願い致します。

発生している問題・エラーメッセージ

Thread 1: Exception: "*** -[__NSArray0 objectAtIndex:]: index 0 beyond bounds for empty NSArray"

該当のソースコード

Swift

1 @objc func didTapAddMatchInfo(_ sender: UIButton, forEvent event: UIEvent) { 2 let touch = event.allTouches?.first 3 let point = touch!.location(in: self.tableView) 4 let indexPath = tableView.indexPathForRow(at: point) 5 6 let postData = postArray[indexPath!.row] 7 8 for matchInfo in matchInfoArray { 9 if postData.matchInfoId == matchInfo.id { 10 // PostDataに保存されているMatchInfoのidと一致するものを次のviewに渡す 11 matchInfoToRelated = matchInfo 12 break 13 } 14 } 15 16 // viewがタップされた時のアクション 17 self.performSegue(withIdentifier: "toRelatedPosts", sender: self) 18 } 19 20 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 21 let relatedHomeViewController = segue.destination as! RelatedHomeViewController 22 relatedHomeViewController.matchInfoFromHomeVC = matchInfoToRelated 23 24 let relatedPostsViewController = relatedHomeViewController.children[0] as! RelatedPostsViewController 25 relatedPostsViewController.sortMatchInfo = matchInfoToRelated 26 27 print("DEBUG_PRINT matchInfoFromHomeVCに値を渡す (String(describing: matchInfoToRelated))") 28 29 self.dismiss(animated: true, completion: nil) 30 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

swift

1 2let relatedPostsViewController = relatedHomeViewController.children[0] as! RelatedPostsViewController 3 relatedPostsViewController.sortMatchInfo = matchInfoFromHomeVC 4

↑これを遷移先のRelatedHomeViewControllerviewDidLoadあたりに移して一部修正してあげたらどうなりますか?


追記

こんな感じで、理由はライフサイクルとかで調べてみてください。

swift

1class HogeViewController: UIViewController { 2 3 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 4 let relatedHomeViewController = segue.destination as! RelatedHomeViewController 5 relatedHomeViewController.matchInfoFromHomeVC = matchInfoToRelated 6 7 self.dismiss(animated: true, completion: nil)// <-これはこれでいいの? 8 } 9} 10 11class RelatedHomeViewController: UIViewController { 12 13 var matchInfoFromHomeVC: MatchData? 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 18 let relatedPostsViewController = relatedHomeViewController.children[0] as! RelatedPostsViewController 19 relatedPostsViewController.sortMatchInfo = matchInfoFromHomeVC 20 } 21}

投稿2020/06/28 20:16

編集2020/06/29 14:14
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ZY.

2020/06/29 14:11 編集

ご回答ありがとうございます。 `RelatedHomeViewController`の`viewDidLoad`で受け取った値を子Viewに渡すよう下記のように修正しました。 しかし同様のエラーが発生するようでした。 ご回答の意図と違うことをしていたら教えていただけると幸いです。 よろしくお願い致します。 ``` RelatedHomeViewController var matchInfoFromHomeVC: MatchData? override func viewDidLoad() { super.viewDidLoad() let relatedHomeViewController = self.storyboard?.instantiateViewController(withIdentifier: "RelatedHomeVC") as! RelatedHomeViewController let relatedPostsViewController = relatedHomeViewController.children[0] as! RelatedPostsViewController relatedPostsViewController.sortMatchInfo = matchInfoFromHomeVC ```
ZY.

2020/06/29 15:10

追記の説明ありがとうございます。 親のViewに遷移したタイミング呼ばれるviewDidLoad()の中で、子Viewにも値を渡すようにするといった意図のアドバイスだということで理解しました。 しかし同様のエラーが発生するようなので、そもそもですが今回の原因は値の受け渡しかたの問題ではなさそうに思えました。 知りたいことが明確になったこともありますので、エラー原因について改めて質問させていただこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問