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

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

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

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

Swift

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

Q&A

解決済

1回答

3079閲覧

ContainerViewControllerでTableViewを表示できない

tarofess

総合スコア127

iOS

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

Swift

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

0グッド

1クリップ

投稿2016/12/23 07:45

ContainerViewControllerでTableViewを表示しようとすると
「Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView (<UITableView: 0x101024400; frame = (0 0; 240 385); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x170240bd0>; layer = <CALayer: 0x17002f4e0>; contentOffset: {0, 0}; contentSize: {240, 4400}>) failed to obtain a cell from its dataSource (<Ê≠ª„Å≠.sineViewController: 0x100a09ce0>)'」
というようなエラーが表示されてアプリが落ちます。
ContainerViewControllerのコードとStoryboardは以下のようになっています。

Swift

1override func viewDidLoad() { 2 super.viewDidLoad() 3 } 4 5 override func didReceiveMemoryWarning() { 6 super.didReceiveMemoryWarning() 7 } 8 9 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 10 return 100 11 } 12 13 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 14 let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 15 cell.textLabel?.text = "test"; 16 return cell 17 }

ContainerViewController

tableviewのcellにはStoryboardでidentifierを振っています。
一体どこがおかしいのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下の部分を確認してみてください。
UITableViewControllerのカスタムクラスに載せているコードを記述している
UITableViewControllerViewDidLoad()メソッドが呼ばれている
UITableViewCellIdentifiercell(全て小文字)になっている(スクショ参照)

s

投稿2016/12/23 08:38

編集2016/12/23 08:40
_Kentarou

総合スコア8490

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

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

tarofess

2016/12/23 11:20

ご回答ありがとうございます。 現在はUIViewControllerにTableViewを乗せています。 しかしViewDidLoadは呼ばれており、Identifierも"cell"になっていました。 ContainerViewではViewControllerにTableViewを乗せるのではなく、ContainerViewでTableViewを使いたかったらTableViewControllerを使わないといけないのでしょうか?
_Kentarou

2016/12/23 11:34

> TableViewControllerを使わないといけないのでしょうか? そんなことは無いです、私がそこまで考えて作っていなかっただけです。 それでしたら、対象のViewControllerにUITableViewDelegate, UITableViewDataSourceのプロトコルを追加してみてください。 class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
tarofess

2016/12/23 12:35

うまくいきました! connection inspectorからdelegateとdatasourceをcontainerViewのtableViewに引っ張ってきていたのですが、提示いただいたようにコードでdatasourceとdelegateを設定すると動きました。 ......理由がよくわからないのが気持ち悪いですが^^;
_Kentarou

2016/12/23 14:00

> 提示いただいたようにコードでdatasourceとdelegateを設定すると動きました。 仕組みがちゃんと理解されていないようですが、以下の2つの記述はそれぞれ必要な記述で、やっている事が違います。 ① class にプロトコル(UITableViewDelegate, UITableViewDataSource)を適用する class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource ② 自分のクラスがdelegate、dataSourceを受けるようにする記述(コードで書いても、Storyboardで設定しても同じです。) tableView.delegate = self tableView.dataSource = self
tarofess

2016/12/23 14:24

上記の①と②の違いについて理解はあるのですが、なぜ今回のケースでconnection inspectorから引っ張ってくる方法では動かなかったのか理解がちょっとできていません。今までconnection inspectorからdelegateとdatasourceを引っ張ってくると①と②をやったことになると認識していたのですが、少し違うのでしょうか? それともcontainerViewに乗せたtableViewだからそのままconnection inspectorから引っ張ってくるだけではダメなのでしょうか?
_Kentarou

2016/12/23 15:00

> 今までconnection inspectorからdelegateとdatasourceを引っ張ってくると①と②をやったことになると認識していたのですが、少し違うのでしょうか? 「connection inspectorからdelegateとdatasourceを引っ張ってくると」のは②を設定しているということです、①は設定されていません。 > containerViewに乗せたtableViewだからそのままconnection inspectorから引っ張ってくるだけではダメなのでしょうか? containerViewは関係無いですね、①が設定されていないのでダメですね。
tarofess

2016/12/23 23:21

そうだったんですね。詳しく解説していただき誠にありがとうございます! とても勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問