

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/WkZic.png)[![サブビューの階層](https://i.stack.imgur.com/NhORE.png)](https://i.stack.imgur.com/NhORE.png)[![デリゲート＆データソースの指定](https://i.stack.imgur.com/hmEkJ.png)](https://i.stack.imgur.com/hmEkJ.png)


CC BY-SA 4.0
2018-10-25T05:27:22.087
49642
2018-10-30T02:57:41.307
2018-10-25T07:06:27.420
30680
30680
question
ios swift4 coredata
Swift4 Xcode 10.1 beta 3 NSFetchedResultsControllerがレイアウトの中ほどに置いたUITableViewを認識しない


自己回答：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などの別名を取るのがいいと思います。

以上


CC BY-SA 4.0
2018-10-30T02:57:41.307
49777
2018-10-30T02:57:41.307
30680
49642
answer