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

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

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

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

Q&A

解決済

1回答

2785閲覧

【Swift】Segueで画面遷移する際に値を渡す方法

ishiishiyay

総合スコア33

TableView

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

0グッド

0クリップ

投稿2018/03/04 09:23

初めまして、Swift初心者です。
LINEとは似て非なる次世代チャットアプリを作っています。
行き詰まってしまいましたので、助けてくださいませ・・・
このままでは世の中を変えられません・・・

【やりたいこと】

友達とのトーク画面の上部のナビゲーションバーのタイトルに、友達の名前を表示させたいです。
そのために、1つ目のview controller(ContactsVC:友達一覧)からtable view内の友達の名前を取得して、
2つ目のview controller(ChatVC:トーク画面)にStringの値を渡したいのですが、うまくできません。。。

【エラー箇所】

エラー無くビルド・実行はできますが、途中でシミュレーターが止まってしまい、
以下コードの 「let chatVC = segue.destination as! ChatVC」のところで、
「Thread 1: signal SIGABRT」 とのエラーメッセージが出てきます。

mainstoryboard上で、ContactsVCとChatVCの間にNavigation Controllerを挟んでしまっているため、
ContactsVCの次のdestinationがChatVCになっていないということでしょうか?
もしその場合、navigation controllerを消すしか方法はないのでしょうか。

コードはこのサイトを参考にしました。
http://begigrammer.hatenablog.com/entry/2016/12/25/000334

お手数ですが、アドバイスを頂けますと非常に非常に幸いです。
よろしくお願いいたします。

Swift

1 2//1つ目のContactsVC内 3 4var result: String = "" 5 6 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ 7 let user = self.contacts[indexPath.row] 8 result = user.name! 9 performSegue(withIdentifier: CHAT_SEGUE, sender: nil) 10 } 11 12 override func prepare (for segue: UIStoryboardSegue,sender: Any?){ 13 if segue.identifier == CHAT_SEGUE { 14 print(result) //tableviewで選択した友達の名前がちゃんと出力されます。 15 let chatVC = segue.destination as! ChatVC //ビルドは成功しますが、ここで「Thread 1: signal SIGABRT」 のエラーメッセージが出ます。 16 chatVC.received = result 17 } 18 19 20//2つ目のChatVC内 (友達とのトーク画面) 21 22 23var received: String? 24@IBOutlet weak var nav: UINavigationItem! 25 26override func viewDidLoad() { 27 self.nav.title = received 28} 29

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

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

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

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

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

guest

回答1

0

ベストアンサー

世界を変える次世代チャットアプリ、、、良いですね!!!

ほとんどご自身で正解にたどり着いていると思いますよ!
このUINavigationControllerから中身のVCを引っ張ってくるところはよくあるパターンですね。

swift

1let chatVC = segue.destination as! ChatVC

がご指摘の通り、UINavigationControllerなのであれば

swift

1let nav = segue.destination as! UINavigationController 2let chatVC = nav.topViewController as! ChatVC

二段階変換でたどり着けると思います。
画面の遷移周りは駄目ならクラッシュも問題の把握も早くできて潔いと思います。

安全にアンラップしながらオプショナルチェーンを使うとこんな感じです。

swift

1guard let vc = (segue.destination as? UINavigationController)?.topViewController as? ChatVC else { return }

投稿2018/03/04 13:54

516k

総合スコア189

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

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

ishiishiyay

2018/03/04 14:11 編集

516k さん 本当にありがとうございます・・・!! 1週間越しに、ようやくできました!! 先ほど部屋で一人で歓喜の声をあげてしまいましたw ありがとうございます! ヒロポメ
516k

2018/03/04 14:19

やりましたね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問