Skip to content

Instantly share code, notes, and snippets.

@erdemildiz
Last active January 28, 2023 09:38
Show Gist options
  • Select an option

  • Save erdemildiz/d08942fa54ae98c029b0f1e7fbf8e03c to your computer and use it in GitHub Desktop.

Select an option

Save erdemildiz/d08942fa54ae98c029b0f1e7fbf8e03c to your computer and use it in GitHub Desktop.
CoreDataManager cheatsheet
import CoreData
import UIKit
// ./NoteList.xcdatamodeld
class CoreDataManager {
static let sharedInstance = CoreDataManager()
private init() { }
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "NoteList")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
func fetchAllNotes() -> [Note] {
let fetchRequest: NSFetchRequest<Note> = Note.fetchRequest()
let context = persistentContainer.viewContext
guard let results = try? context.fetch(fetchRequest) else {
return []
}
return results
}
func createNote(for title: String, content: String) {
let managedObjectContext = persistentContainer.viewContext
let note = Note(context: managedObjectContext)
note.title = title
note.content = content
note.createdDate = Date()
note.id = UUID()
do {
try managedObjectContext.save()
} catch {
print(error)
}
}
func fetchNote(for id: UUID) -> Note? {
let predicate = NSPredicate(format: "id == %@", id as CVarArg)
let fetchRequest: NSFetchRequest<Note> = Note.fetchRequest()
fetchRequest.predicate = predicate
let context = persistentContainer.viewContext
guard let results = try? context.fetch(fetchRequest) else {
return nil
}
return results.first
}
func delete(for noteId: UUID) {
guard let note = fetchNote(for: noteId) else {
return
}
let context = persistentContainer.viewContext
do {
context.delete(note)
try context.save()
} catch {
print("Error saving: \(error)")
}
}
}
@erdemildiz
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment