🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
TableView

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

1055閲覧

SegementSlideを使うとTableViewがnilというエラーになる

ringoringogogo

総合スコア15

TableView

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/12/04 01:47

単体のTableViewクラスでは表示されるのですがSegementSlideを使って表示させようとすると表示されなくなってしまいます。

手順としては、まずViewControllerクラスのみを実装し、テーブルの内容が表示されることを確認。
その後、BaseViewControllerクラスを追加し、case 0、1、default全てViewControllerが表示されるようにしました。

しかし、そのようにすると

tableView.dataSource = self

の部分で

Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value

というエラーが発生してしまいます。

何かを設定する必要があるのかどうかも検索しても答えが見つからず、教えていただけないでしょうか。

BaseViewControllerクラスです

Swift

1import UIKit 2import SegementSlide 3 4class BaseViewController: SegementSlideDefaultViewController { 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 defaultSelectedIndex = 0 9 // Do any additional setup after loading the view. 10 } 11 12 override var titlesInSwitcher: [String]{ 13 return ["test1","test2"] 14 } 15 16 override func segementSlideContentViewController(at index: Int) -> SegementSlideContentScrollViewDelegate? { 17 switch index { 18 case 0: 19 return ViewController() 20 case 1: 21 return ViewController() 22 default: 23 return ViewController() 24 } 25 } 26}

ViewControllerクラスです

Swift

1import UIKit 2import SegementSlide 3 4class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,SegementSlideContentScrollViewDelegate { 5 6 let TODO = ["牛乳を買う", "掃除をする", "アプリ開発の勉強をする"] //追加② 7 8 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 9 TODO.count 10 } 11 12 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 13 // セルを取得する 14 let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 15 // セルに表示する値を設定する 16 cell.textLabel!.text = TODO[indexPath.row] 17 return cell 18 } 19 20 21 override func viewDidLoad() { 22 super.viewDidLoad() 23 tableView.dataSource = self 24 tableView.delegate = self 25 // Do any additional setup after loading the view. 26 } 27 28 @IBOutlet weak var tableView: UITableView! 29 30 31 32}

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

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

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

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

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

guest

回答1

0

ベストアンサー

おそらく、ViewController の UITableView はStoryBoard上で配置しているとおもいますが、そうであれば

Swift5

1 return ViewController()

のように、ViewController を直接インスタンス化しても UITableView をインスタンス化することはできません。
なので、

Swift5

1 @IBOutlet weak var tableView: UITableView!

で指定したプロパティは nil のままとなり、dataSource を設定する部分で実行時エラーが出てしまっています。

StoryBoard(Interface Builder)でUI部品を配置したのであれば、たとえば

Swift

1 let vc = storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController 2 return vc

のように感じでインスタンス化することで、StoryBoard で配置した部品も含めて正しく ViewController のインスタンスを作ることができるようになります。

上記は例ですので(ただし、一応実行できます)、細かい部分は実行環境によってことなりますので、それについては別途調べてみてもらえますでしょうか。

投稿2020/12/04 09:00

TsukubaDepot

総合スコア5086

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

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

ringoringogogo

2020/12/05 14:01

ご丁寧に解説いただいてありがとうございます!!! おかげさまで、以下のコードに変更したらtableがnilではなくなり、正しく表示されました!! case 0: return storyboard?.instantiateViewController(identifier: "ViewController") as! ViewController 本当に感謝いたします。ありがとうございます!!
TsukubaDepot

2020/12/05 22:30

解決したようでよかったのですが、解決されたのであれば「解決済み」にしていただけませんでしょうか。 よろしくお願いいたします。
ringoringogogo

2020/12/06 23:58

失礼いたしました、解決すみにしました。本当にありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問