FRCDataManager 1.1.9

FRCDataManager 1.1.9

TestsTested
LangLanguage SwiftSwift
License MIT
ReleasedLast Release Nov 2019
SPMSupports SPM

Maintained by Mandea Daniel.



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) Version License Platform

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.