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

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

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

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

Q&A

解決済

1回答

3905閲覧

Swift3.0での画面遷移時のパラメータの渡し方

nilfs

総合スコア23

Swift

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

0グッド

0クリップ

投稿2016/12/31 09:41

編集2016/12/31 12:48

他の質問サイトでもタイトルのような質問はいくつもあったのですが、xcode8でSwift3.0の画面遷移はなかなか見つかりませんでしたので質問させていただきます。

質問内容をまとめると、AAAというUIViewControllerからBBBというUIViewControllerに画面遷移する際にAAA内のパラメータをBBBのパラメータに渡したいです。

AAA(UIViewController)のIdentityのStoryBoard IDがaaa。
BBB(UIViewController)のIdentityのStoryBoard IDがbbb。

以下のコードを書きAAA上のボタン(aaabtn)を押したとき「libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 」というエラーが出ます。解決策の提案をよろしくお願いします。

Swift

1// AAA.swift 2 3import UIKit 4 5class AAA: UIViewController{ 6 7 @IBAction func aaabtn(_ sender: Any) { 8 9 print("aaabtnが押されました") 10 performSegue(withIdentifier: "bbb",sender: nil) 11 } 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 print("AAAが読まれました") 16 } 17 18 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 19 if segue.identifier == "bbb" { 20 let secondViewController = segue.destination as! BBB 21 secondViewController.parameter = 1 22 } 23 } 24 25 override func didReceiveMemoryWarning() { 26 super.didReceiveMemoryWarning() 27 // Dispose of any resources that can be recreated. 28 } 29}

swift

1//BBB.swift 2 3import UIKit 4 5class BBB: UIViewController{ 6 7 @IBOutlet weak var label: UILabel! 8 var parameter:Int = 0 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 print("BBBが読まれました") 13 print(parameter) 14 } 15 16 override func didReceiveMemoryWarning() { 17 super.didReceiveMemoryWarning() 18 // Dispose of any resources that can be recreated. 19 } 20}

identiferの位置が誤っていたため以下のように修正し、また以下のようにエラーが出力されました。
identiferの修正
画面遷移先のBBB
AToBに関して

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

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

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

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

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

guest

回答1

0

ベストアンサー

自分の手元で実行した所、問題なく画面遷移して値も渡せていました。

ボタンの@IBActionをもう一度結び直す、Storyboard SegueIdentifierbbbになっている事を再度確認してみてください。

投稿2016/12/31 10:04

_Kentarou

総合スコア8490

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

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

nilfs

2016/12/31 11:29

回答ありがとうございます。 プロジェクトを作り直し、再度試しましたがエラーは消えませんね。先ほどのエラーを遡ってみますとこのようにエラーが出力されていました。 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<screenTra.ViewController: 0x7fb45d407dc0>) has no segue with identifier 'bbb'' 遷移先のViewControllerであるBBBのStoryboard IDをbbbと設定しているのにも関わらずそのようなエラーが出ているのが現状です。
_Kentarou

2016/12/31 11:37 編集

設定している箇所が違うのではないでしょうか? ※ Storyboard IDではないですよ、、、 エラーの内容は正しいと思います。 何処に設定しているかスクショをのせてください。
nilfs

2016/12/31 12:04

質問内容本編の方で更新させていただきました。確かに指定するidentiferが間違っていました。しかし、Unknown class BBB in Interface Builder file.とエラーが出てしまいました...。
_Kentarou

2016/12/31 12:17

遷移先の画面のクラス(Storyboardのクラス名)がBBBになっていないと思います。 いかがでしょうか?
nilfs

2016/12/31 12:38

更新しました。写真の通りBBBになってます...
_Kentarou

2016/12/31 12:43

> 更新しました。写真の通りBBBになってます... 上記は確認しました、問題ないと思います。 その前の画像でStoryboard IDが AToBになっていますが、そちらはbbbになっているということでよろしいですか?
nilfs

2016/12/31 12:48

更新しました。このようにソースコードの方をAToBに更新しています。
_Kentarou

2016/12/31 12:53

performSegue(withIdentifier: "bbb",sender: nil)とコードで書いているので、そこはbbbにしてください。
_Kentarou

2016/12/31 12:59 編集

Storyboard IDは使っていないので空欄でよいです。
nilfs

2016/12/31 13:05

performSegue(withIdentifier:"bbb",sender: nil) と if segue.identifier == "bbb" と 1枚目の画像のidentiferは同じである必要があるという解釈で構いませんか?
_Kentarou

2016/12/31 13:08

はい、認識はあっています。一枚目の画像がAToBになっているのでそろっていませんが。
nilfs

2016/12/31 13:12

現在は1枚目と3枚目のようにAToBにしており、BBB(ViewController)のStoryBoard IDをbbbにしています。
_Kentarou

2016/12/31 13:17

そこのbbbをコードで指定しているので揃っている必要があるのですが、、、 なぜそのように記述しているのですか?どこかのサイトを参考にしていますか?
_Kentarou

2016/12/31 13:19

一番最初の状態でうまく行っていいたので、戻したほうが早いと思いますが。
nilfs

2016/12/31 13:26

分かりました。戻してもう少し格闘してみます。
nilfs

2016/12/31 13:40

原因はわかりませんが最初の状態に戻し、修正すると正常にパラメーターを渡して画面遷移することができました。細いところまで指摘していただきありがとうございました。 2017年良いお年にしてください。
_Kentarou

2016/12/31 13:47 編集

よかったです、Storyboard ID、Storyboard Segue Identifier、performSegue、prepare、そのあたりをちゃんと理解しないとまた躓くことになると思うので、頑張ってくだだい。 2016年お疲れ様でした、良いお年を。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問