FRCDataManager
Contains multiple helper classes that improves working with NSFetchResultsController. It has full support for UITableView and it's very simple to use.
ViewController:
import UIKit
import FRCDataManager
import PullToRefreshSwift
class TopRatedViewController: UIViewController {
// MARK: - Outlets
@IBOutlet weak var tableView: BaseTableView!
// MARK: - Internal
var dataManager: TopRatedDataManager = {
return TopRatedDataManager()
}()
override func viewDidLoad() {
super.viewDidLoad()
// Setup
dataManager.delegate = tableView
tableView.dataSource = dataManager
}
}
Data Manager:
import FRCDataManager
import CoreData
class TopRatedDataManager: BaseTVCFetchRequestDataManger, BaseFetchResultsController, TableViewDataSource {
// MARK: - Init
override init() {
super.init()
}
// MARK: - BaseFetchResultsController
typealias ManagedObject=Feed
var _fetchedResultsController: NSFetchedResultsController<ManagedObject>?
var fetchedResultsController: NSFetchedResultsController<ManagedObject> {
if _fetchedResultsController != nil {
return _fetchedResultsController!
}
// Setup fetchRequest
let fetchRequest: NSFetchRequest<Feed> = Feed.fetchRequest()
fetchRequest.fetchBatchSize = 20
// Edit the sort key as appropriate.
let sortDescriptor = NSSortDescriptor(key: "date", ascending: false)
fetchRequest.sortDescriptors = [sortDescriptor]
// Edit the section name key path and cache name if appropriate.
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: CoreDataManger.sharedInstance.persistentContainer.viewContext, sectionNameKeyPath: nil, cacheName: nil)
aFetchedResultsController.delegate = self
_fetchedResultsController = aFetchedResultsController
do {
try _fetchedResultsController!.performFetch()
} catch {
// Show error
let nserror = error as NSError
print("Unresolved error \(nserror), \(nserror.userInfo)")
}
return _fetchedResultsController!
}
func tableViewCell(_ tableView: UITableView, indexPath: IndexPath, cellData:ManagedObject?) -> UITableViewCell {
// Setup feed cell
if let feed = cellData,
let cell = tableView.dequeueReusableCell(withIdentifier: kFeedTableViewCellReuseIdentifier, for: indexPath) as? FeedTableViewCell {
cell.feed = feed
return cell
}
return UITableViewCell()
}
}
// MARK: - TopRatedDataManager
extension TopRatedDataManager: UITableViewDataSource {
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return _tableView(tableView, numberOfRowsInSection: section)
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return _tableView(tableView, cellForRowAt: indexPath)
}
public func numberOfSections(in tableView: UITableView) -> Int {
return _numberOfSections(in: tableView)
}
}
Provides support for simple and advanced DataSources, helps when a decoupled echosystem is needed.
Example:
@to be provided
[![CI Status](http://img.shields.io/travis/Mandea Daniel/FRCDataManager.svg?style=flat)](https://travis-ci.org/Mandea Daniel/FRCDataManager)
Usage
To run the example project, clone the repo, and run pod install
from the Example directory first.
Requirements
Installation
FRCDataManager is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod "FRCDataManager"
Author
Mandea Daniel, [email protected]
License
FRCDataManager is available under the MIT license. See the LICENSE file for more info.