teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

エラーについて追記

2019/08/03 00:21

投稿

hayabusabusash
hayabusabusash

スコア776

answer CHANGED
@@ -53,4 +53,23 @@
53
53
 
54
54
  個人的には画面が増えるごとにStoryboardが重くなるのと、
55
55
  Storyboard上の特定のViewControllerだけ生成したい場合面倒なので
56
- 1つのStoryboardには1つのViewControllerだけを定義するようにすることをお勧めします。
56
+ 1つのStoryboardには1つのViewControllerだけを定義するようにすることをお勧めします。
57
+
58
+ # 追記(2019/08/03)
59
+ プロジェクトとエラーの記載ありがとうございます!
60
+
61
+ まずエラーですが、
62
+ 以下のようなエラーが出ています。
63
+
64
+ > Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Could not find a storyboard named 'Main' in bundle NSBundle
65
+
66
+ `Main`というStoryboard(デフォルトで一番最初に作られるStoryboardですね)が見つからなくて落ちているようです。
67
+ プロジェクトを確認したところ、Xcodeの設定の**Main Interface**が`Main`になっていました。
68
+ (**Main Interface**はアプリ起動時に一番最初に表示するViewControllerを設定する項目です)
69
+
70
+ ![Xcodeの設定](f40aa230450419d6c34efbbaa943796d.png)
71
+
72
+ これを`TabViewController`など自分が表示させたいViewControllerに変えてみたらエラーは解消されると思います。
73
+
74
+ 落ちた場合には大概エラーがコンソールに表示されるので、
75
+ 1度目を通してみることをお勧めします。エラーをそのままコピペして検索すると解決策が出てくるかもしれませんしね。

1

追記に対する回答を追加

2019/08/03 00:21

投稿

hayabusabusash
hayabusabusash

スコア776

answer CHANGED
@@ -22,4 +22,35 @@
22
22
  StoryboardからViewControllerを生成するようにしないとStoryboardで作ったレイアウトが反映されないんじゃないかなと思います。
23
23
 
24
24
  簡単にですが[サンプルプロジェクト](https://github.com/hayabusabusa/TeratailTabmanSample)を作ってみたので、
25
- よければ参考にしてみてください。
25
+ よければ参考にしてみてください。
26
+
27
+ # 追記(2019/08/01)
28
+ レイアウトが反映されない件についてですが、
29
+ 現状は以下のようにして`viewControllers`に表示したいViewControllerを生成していると思います。
30
+
31
+ ```swift
32
+ private var viewControllers = [ViewController1(),UIViewController2(),UIViewController3()]
33
+ ```
34
+
35
+ これでは`ViewController1`、`UIViewController2`などをStoryboardから生成したことにはなりません。
36
+
37
+ Storyboardで作ったレイアウトを反映したViewControllerを生成したい場合、
38
+ **StoryboardからViewControllerを生成する必要があります。**
39
+
40
+ サンプルプロジェクトでは以下のようにしてStoryboardからViewControllerを生成しています。
41
+ ついでに[参考になりそうなサイト](http://crossbridge-lab.hatenablog.com/entry/2015/12/14/073000)
42
+
43
+ ```Swift
44
+ // Tabmanで表示するViewControllerを生成
45
+ guard let firstVC = UIStoryboard(name: "FirstViewController", bundle: nil).instantiateInitialViewController(),
46
+ let secondVC = UIStoryboard(name: "SecondViewController", bundle: nil).instantiateInitialViewController() else {
47
+ return
48
+ }
49
+
50
+ ```
51
+
52
+ 現在は一つのStoryboardに複数のViewControllerを定義しているみたいですが
53
+
54
+ 個人的には画面が増えるごとにStoryboardが重くなるのと、
55
+ Storyboard上の特定のViewControllerだけ生成したい場合面倒なので
56
+ 1つのStoryboardには1つのViewControllerだけを定義するようにすることをお勧めします。