Created
July 9, 2018 16:05
-
-
Save ezequieloliveiralima/c970636cc643469352c46e908eb23271 to your computer and use it in GitHub Desktop.
Generic Data Base Manager for Core Data
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
import CoreData | |
class DBManager { | |
private static var managedObjectContext: NSManagedObjectContext { | |
return (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext | |
} | |
class func create<E>(proccess: (_ object: E) -> Void) -> Bool { | |
do { | |
proccess(NSEntityDescription.insertNewObject(forEntityName: "\(E.self)", into: managedObjectContext) as! E) | |
try managedObjectContext.save() | |
return true | |
} | |
catch let error { | |
fatalError(error.localizedDescription) | |
} | |
return false | |
} | |
class func read<E>(proccess: ((_ fetchRequest: NSFetchRequest<NSFetchRequestResult>) -> Void)?) -> [E] { | |
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "\(E.self)") | |
proccess?(fetchRequest) | |
do { | |
return try managedObjectContext.fetch(fetchRequest) as! [E] | |
} | |
catch let error { | |
fatalError(error.localizedDescription) | |
} | |
} | |
class func update<E>(proccess: ((_ fetchRequest: NSFetchRequest<NSFetchRequestResult>) -> Void)?, update: (_ objects: [E]) -> Void) -> Bool { | |
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "\(E.self)") | |
proccess?(fetchRequest) | |
do { | |
update(try managedObjectContext.fetch(fetchRequest) as! [E]) | |
try managedObjectContext.save() | |
return true | |
} | |
catch let error { | |
fatalError(error.localizedDescription) | |
} | |
return false | |
} | |
class func delete<E>(proccess: ((_ fetchRequest: NSFetchRequest<NSFetchRequestResult>) -> Void)?, deletedObjects: ((_ objects: [E]) -> Void)?) -> Bool { | |
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "\(E.self)") | |
do { | |
let objects = try managedObjectContext.fetch(fetchRequest) as! [E] | |
deletedObjects?(objects) | |
for object in objects { | |
managedObjectContext.delete(object as! NSManagedObject) | |
} | |
try managedObjectContext.save() | |
return true | |
} | |
catch let error { | |
fatalError(error.localizedDescription) | |
} | |
return false | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment