-
Helps you quickly assemble
CoreData
stack -
Provides a generic wrapper around
NSFetchedResultsController
Swift Package Manager
If you want to use EasyCoreData in any other project that uses SwiftPM, add the package as a dependency in Package.swift:
dependencies: [
.package(url: "https://github.com/Anastasia-Petrova/EasyCoreData.git", from: "0.2.0"),
]
-
Initialize
CoreDataController
specialized withPersonManagedObject
and decoded intoPersonViewModel
:let coreDataController = CoreDataController<PersonManagedObject, PersonViewModel>( entityName: PersonManagedObject.firstName, keyForSort: PersonManagedObject.firstName, sectionKey: PersonManagedObject.lastName )
-
Set update callbacks:
coreDataController.beginUpdate = { tableView.beginUpdates() } coreDataController.endUpdate = { tableView.endUpdates() }
-
Set change callback:
coreDataController.changeCallback = { change in switch change.type { case let .row(rowChangeType): switch rowChangeType { case let .delete(indexPath): tableView.deleteRows(at: [indexPath], with: .automatic) case let .insert(indexPath): tableView.insertRows(at: [indexPath], with: .automatic) case let .move(fromIndexPath, toIndexPath): tableView.deleteRows(at: [fromIndexPath], with: .automatic) tableView.insertRows(at: [toIndexPath], with: .automatic) case let .update(indexPath): tableView.reloadRows(at: [indexPath], with: .automatic) case let .error(error): print(error) } case let .section(sectionChangeType): switch sectionChangeType { case let .delete(index): tableView.deleteSections(IndexSet(integer: index), with: .automatic) case let .insert(index): tableView.insertSections(IndexSet(integer: index), with: .automatic) case let .error(error): print(error) } } }
- Implement generic
CoreDataController
that wrapsNSFetchedResultsController
- Implement
CoreDataStack
that assembles stack - Unit Test
CoreDataController
- Unit Test
CoreDataStack