FRCDataManager
包含多个辅助类,这些类可以优化与 NSFetchResultsController 一起使用时的操作。它完全支持 UITableView,并且非常易于使用。
视控制器
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
}
}
数据管理器
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)
}
}
提供对简单和高级数据源的支持,在有解耦生态系统需求时非常有用。
示例
@to be provided
[](https://travis-ci.org/Mandea Daniel/FRCDataManager)
用法
要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install
需求
安装
FRCDataManager可通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中:
pod "FRCDataManager"
作者
Mandea Daniel,[email protected]
许可证
FRCDataManager遵循MIT许可证。更多详情请参阅LICENSE文件。