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

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

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

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

Swift

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

解決済

storyboardが使われない設定にしているはずなのにcould not find storyboard named "Main"が出てエラーになる。

lady-navigation
lady-navigation

総合スコア0

TableView

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

Swift

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

1回答

0評価

2クリップ

6539閲覧

投稿2019/10/01 15:33

編集2022/01/12 10:58

storyboardを使わない設定と、SceneDelegate導入への対応について

storyboardを使わずに、NavigationControllerとTableViewを使って、シンプルな画面遷移を構築したい。

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

Main.storyboardをゴミ箱に送り、infoからもMainを消したが、"could not find storyboard"のエラーメッセージがでる。また、SceneDelegateの導入により、AppDelegateに書いた処理が実行されない(?)とのことなのでqiitaを参考にコードを追加したが、エラーが直らなかった。

エラーメッセージ Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Could not find a storyboard named 'Main' in bundle NSBundle ### 該当のソースコード //SceneDelegate.swift import UIKit @available(iOS 13.0, *) class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). guard let _ = (scene as? UIWindowScene) else { return } let myFirstViewController: ViewController = ViewController() let nc = UINavigationController(rootViewController: myFirstViewController) let window = UIWindow(windowScene: scene as! UIWindowScene) self.window = UIWindow(frame:UIScreen.main.bounds) self.window = window self.window?.rootViewController = nc window.makeKeyAndVisible() } //遷移前の画面(ViewController.swift) import UIKit class ViewController: UIViewController { let mySections = ["",""] let Settings = [["一般","コントロールセンター","画面表示","壁紙","siri","touch ID"], ["ITunes","Wallet","パスワード"] ] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. var tableView: UITableView = UITableView() tableView = UITableView(frame:CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height),style: .grouped) tableView.delegate = self tableView.dataSource = self self.view.addSubview(tableView) } } extension ViewController: UITableViewDataSource{ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return Settings[section].count } func numberOfSections(in tableView: UITableView) -> Int { return mySections.count } func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return mySections[section] } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell: UITableViewCell = UITableViewCell(style: .default, reuseIdentifier: "cell") cell.textLabel!.text = Settings[indexPath.section][indexPath.row] return cell } } extension ViewController: UITableViewDelegate{ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { print("(indexPath.section+1)番目のセクション、(indexPath.row+1)番目の行が選択されました。") tableView.deselectRow(at: indexPath, animated: true) switch indexPath.section { case 0: switch indexPath.row { case 0: let secondViewController = generalViewController() self.navigationController?.pushViewController(secondViewController, animated: true) break default: break } default: break } } } //遷移先画面(genaralViewController.swift) import Foundation import UIKit let mySections2 = ["","",""] let General = [["情報","ソフトウェア・アップデート"], ["AirDrop","Handoff","Carplay"], ["ホームボタン"] ] class generalViewController: UIViewController { var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() tableView = UITableView(frame: CGRect(x: 0,y: 0,width: self.view.bounds.width, height: self.view.bounds.height),style: .grouped) tableView.dataSource = self self.view.addSubview(tableView) } } extension generalViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return General[section].count } func numberOfSections(in tableView: UITableView) -> Int { return mySections2.count } func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return mySections2[section] } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell: UITableViewCell = UITableViewCell(style: .default, reuseIdentifier: "cell") cell.textLabel?.text = General[indexPath.section ][indexPath.row] return cell } } ```ここに言語名を入力 swift ### 試したこと https://qiita.com/omochimetaru/items/31df103ef98a9d84ae6b ・こちらの「以前のiOSのサポート」の部分 ・infoのMain消し ・Main.storyboardをMove to trush ### 補足情報(FW/ツールのバージョンなど) simulatorはIphone 11 Pro Max

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

TableView

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

Swift

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