     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)
   }
 

  /// Gives public access to the data-source object so that controller
  /// sub-classes can access the data source and set up blocks for mapping rows
  /// to cell identifiers and configuring table cells using managed objects.
  public let dataSource = UITableViewFetchedResultsDataSource<Result>()

  // Delegate to the embedded data source.


import UIKit
import CoreData

/// The controller cannot use Swift generics. Subclasses will still be able to
/// inherit from a generic class but Interface Builder will not be able to find
/// the subclass by name when instantiating a storyboard. For this reason, the
/// class uses the basic `NSFetchRequestResult` protocol for the fetch result
/// type which in turn inherits from `NSObjectProtocol`, and hence just
/// represents some basic `NSObject`.
open class UITableViewFetchedResultsController: UITableViewController, NSFetchedResultsControllerDelegate {

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