質問: UIViewControllerでレイアウトの中ほどに置いたTableViewのデータソースをFetchedResultsControllerで管理したいのですがTableViewを認識しません。(下のエラーメッセージ参照) 2018-10-25 16:01:40.151608+0900 Proto5ver2[1101:234061] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UITableViewController loadView] instantiated view controller with identifier "testPortal" from storyboard "Main", but didn't get a UITableView.' ビューコントローラはUIViewControllerで作成しましたが、後からUITableViewControllerに変更し、NSFetchedResultsControllerDelegateを追加しています import UIKit import CoreData class TestPortalViewController: UITableViewController, NSFetchedResultsControllerDelegate { ・TableView(taskTableView)にはStoryboardで、delegateとdatasourceを指定していますから、これを認識してくれると思ったのですが上手くいきません。 何かを見落としているのでしょうか、アドバイスをお願いいたします。 ちなみに、最初からUITableViewControllerで作成したビューコントローラでは同じコードが動きます。 ![サブビューの配置](https://i.stack.imgur.com/WkZic.png)![サブビューの階層](https://i.stack.imgur.com/NhORE.png)![デリゲート&データソースの指定](https://i.stack.imgur.com/hmEkJ.png)
回答: 自己回答:UIViewControllerでUITableViewとNSFetchedResultsControllerを動かすポイント。 1. ViewControllerの継承 ViewControllerにはUITableViewDataSourceとNSFetchedResultsControllerDelegateを継承させます。ただしMaster-Detail的に作る場合はUITableViewDelegateの継承も必要です。つまりUITableViewControllerを継承するViewControllerとの違いは最初から含まれるか手作業で入れるのかの違いだけです。 2. DataSourceの指定 次にStoryboardに用意するUITableViewをDataSourceとDelegateに指定します。さらにViewControllerのプロパティとしてアウトレット接続します。 3. NSFetchedResultsControllerDelegateの実装 最後にここで付けた名前をNSFetchedResultsControllerDelegateの各プロトコルの実装でデータソース名として使用します。この名前をtableViewにするとDataSourceのプロトコルにも同じ名前のメソッドがあり混乱しがちです。fooTableViewなどの別名を取るのがいいと思います。 以上