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

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

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

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

Swift

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

0回答

705閲覧

Push画面遷移をしたい

quwant

総合スコア5

iOS

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

Swift

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/06/01 04:00

Push画面遷移について質問があります。
現在、下記の雛形をベースに実コードを書きました。
実行してみるとエラーになってしまいます。
検索した結果、「Use Storyboard ID」のチェック忘れやクリーンすることで解消されるとあったのですが、どちらを実施しても解消されませんでした。
何がエラー原因なのか判明可能でしょうか?
教えていただきたいです。

<遷移元>
Storyboard-Name : CreateRequest.storyboard
ViewController-Name : CreateRequestViewController.swift

<遷移先>
Storyboard-Name : ShowResult.storyboard
ViewController-Name : ShowResultViewController.swift

▼雛形

Swift

1 let storyboard: UIStoryboard = UIStoryboard(name: "遷移元ストーリーボード名", bundle: nil) 2 let nextVC = storyboard.instantiateViewController(withIdentifier: "遷移先StoryboardID") as! UIViewController 3 self.navigationController?.pushViewController(nextVC, animated: true)

▼実コード

Swift

1 let storyboard: UIStoryboard = UIStoryboard(name: "CreateRequest", bundle: nil) 2 let nextVC = storyboard.instantiateViewController(withIdentifier: "nextView") as! ShowResultViewController 3 self.navigationController?.pushViewController(nextVC, animated: true) 4

▼エラー

reason: 'Storyboard (<UIStoryboard: 0x600002161da0>) doesn't contain a view controller with identifier 'nextView'' terminating with uncaught exception of type NSException

▼遷移元
遷移元
▼遷移先
遷移先

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

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

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

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

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

tomato879241

2021/06/01 04:04

View controllerに「Storyboard ID」が設定されていないからでは?
tomato879241

2021/06/01 04:06

Interface Builderを選択し、それぞれのview controllerを選択し、IDが設定されてあるか確認されては?
quwant

2021/06/01 05:03

tomato879241さん 毎度、ご回答ありがとうございます。 IDとはStoryboardIDのことでしょうか?
quwant

2021/06/01 05:08

質問に添付した画像の様では間違いでしょうか?
tomato879241

2021/06/01 05:11

なるほど。Storyboardの名前は正しいですか?
quwant

2021/06/01 05:14

遷移元ストーリーボード名のことでよろしいでしょうか? 遷移元ストーリーボード名はCreateRequest.storyboard コードに記載したストーリーボード名はCreateRequest なので正しいと思います
tomato879241

2021/06/01 05:23

コードでは遷移先のStoryboard名が「"CreateRequest"」となっています。「ShowResult」となるのでは?
quwant

2021/06/01 05:32

ShowResultにするとエラーは無くなりました。 loadView()だったりviewDidLoad()にログを仕込んだのですが出力されなかったのでおそらく遷移できていないようです。 雛形は下記のように書くのが正解だったのでしょうか? ×:let storyboard: UIStoryboard = UIStoryboard(name: "遷移元ストーリーボード名", bundle: nil) ○:let storyboard: UIStoryboard = UIStoryboard(name: "遷移先ストーリーボード名", bundle: nil)
tomato879241

2021/06/01 05:43

>loadView()だったりviewDidLoad()にログを仕込んだのですが ボタンをタップするときに「実コード」を試して、view controllerが遷移するか試したらどうでしょうか?view controllerを遷移させるためのコードをviewDidLoadに書くのはおかしいですよ。viewDidLoadの目的をご存知ですか? >雛形は下記のように書くのが正解だったのでしょうか? はい。
quwant

2021/06/01 05:50

ボタンを設置し押下時に実コードを実行してみましたが遷移しませんでした。。。 言葉足らずだったかもしれません。 viewDidLoad()には「ログ:print("did")」を記載しました。 また、遷移先のviewDidLoad()に記載しました。 理由としては遷移元と遷移先で理由は分からないが遷移はしているが同一内容が表示されている可能性があると思ったからです。 実コードを書く場所は遷移元だと思っているのですがそれは正しいでしょうか?
quwant

2021/06/01 05:52

ちなみにLaunchScreenからShowResult.storyboardに遷移する設定を試したところ正常に表示されましたので遷移先画面自体は作成できていて、遷移実行部分にミスがあると考えています。
hoshi-takanori

2021/06/01 08:06

遷移元の画面は UINavigationController の中にありますか?
quwant

2021/06/01 08:09

hoshi-takanoriさん、毎度ご回答ありがとうございます。 設定したつもりですが、調べたものをマネただけなので自信ないです コードは下記になります var window: UIWindow? var navigationController: UINavigationController? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. let createResultViewController: CreateRequestViewController = CreateRequestViewController() navigationController = UINavigationController(rootViewController: createResultViewController) self.window = UIWindow(frame: UIScreen.main.bounds) self.window?.rootViewController = navigationController self.window?.makeKeyAndVisible() return true }
hoshi-takanori

2021/06/01 08:17

そのコードは AppDelegate に書いたんですよね? 今の iOS では SceneDelegate に書くべきだし、CreateRequestViewController を CreateRequest.storyboard からではなくコードで生成する意味もよくわからないですね…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問