     return dataSource.fetchedResultsController
   }
 
-  public override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+  open override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
     return dataSource.tableView(tableView, numberOfRowsInSection: section)
   }
-  public override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+
+  open override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     return dataSource.tableView(tableView, cellForRowAt: indexPath)
   }
-  public override func numberOfSections(in tableView: UITableView) -> Int {
+
+  open override func numberOfSections(in tableView: UITableView) -> Int {
     return dataSource.numberOfSections(in: tableView)
   }
-  public override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
+
+  open override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
     return dataSource.tableView(tableView, titleForHeaderInSection: section)
   }
 

import UIKit
import CoreData

public class UITableViewFetchedResultsController<Result: NSFetchRequestResult>: UITableViewController, NSFetchedResultsControllerDelegate {

  /// Use `prepareForSegue` to propagate the managed-object context. The
  /// controller needs one.

  /// set up. Uses user-defined run-time attributes to derive the entity
  /// description and sort descriptor, and optionally also the section name
  /// key-path and cache name.
  public var fetchedResultsController: NSFetchedResultsController<NSFetchRequestResult> {
    if dataSource.fetchedResultsController == nil {
      dataSource.fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest,
                                                                       managedObjectContext: managedObjectContext,
