Getting Started with Core Data
Don't forget to check "Use Core Data" checkbox
Like following
@objc(Item)
public class Item: NSManagedObject {
public override func awakeFromInsert() {
super.awakeFromInsert()
self.creationDate = NSDate()
}
}
// MARK: - Core Data stack
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "WishList")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
// MARK: - Core Data Saving support
func saveContext () {
let context = persistentContainer.viewContext
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
}
let ad = UIApplication.shared.delegate as! AppDelegate
let context = ad.persistentContainer.viewContext
// MARK: - NSFetchedResultsControllerDelegate
extension MainVC: NSFetchedResultsControllerDelegate {
func attempFetch(){
let fetchRequest: NSFetchRequest<Item> = Item.fetchRequest()
let dateSort = NSSortDescriptor(key: "creationDate", ascending: false)
let priceSort = NSSortDescriptor(key: "price", ascending: false)
let titleSort = NSSortDescriptor(key: "title", ascending: false)
if segmentedControl.selectedSegmentIndex == 0 {
fetchRequest.sortDescriptors = [dateSort]
} else if segmentedControl.selectedSegmentIndex == 1 {
fetchRequest.sortDescriptors = [priceSort]
} else {
fetchRequest.sortDescriptors = [titleSort]
}
let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
controller.delegate = self
self.controller = controller
do {
try controller.performFetch()
} catch {
let error = error as NSError
print("\(error)")
}
}
func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
tableView.beginUpdates()
}
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
tableView.endUpdates()
}
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) {
switch type {
case .insert:
if let indexPath = newIndexPath {
tableView.insertRows(at: [indexPath], with: .fade)
}
break
case .delete:
if let indexPath = indexPath {
tableView.deleteRows(at: [indexPath], with: .fade)
}
break
case .move:
if let indexPath = indexPath {
tableView.deleteRows(at: [indexPath], with: .fade)
}
if let indexPath = newIndexPath {
tableView.insertRows(at: [indexPath], with: .fade)
}
break
case .update:
if let indexPath = indexPath {
let cell = tableView.cellForRow(at: indexPath) as! ItemCell
configureCell(cell: cell, indexPath: indexPath)
}
break
}
}
}
let item = Item(context: context)
// set item properties
ad.saveContext()
let item = itemToEdit // get NSObject instance
// set item properties
ad.saveContext()
context.delete(itemToDelete!)
ad.saveContext()
Tags : CoreData / coredata / Core data / Core Data / core data / core Data