Skip to content

Instantly share code, notes, and snippets.

@celian-m
Last active May 10, 2016 12:20
Show Gist options
  • Save celian-m/d7d08b7a9f58cfac42e2d0ee1862198f to your computer and use it in GitHub Desktop.
Save celian-m/d7d08b7a9f58cfac42e2d0ee1862198f to your computer and use it in GitHub Desktop.
Core Data Manager for Swift usage
//
// CoreDataController.swift
//
//
// Created by Célian MOUTAFIS on 26/04/2016.
// Copyright © 2016 mouce. All rights reserved.
//
import Foundation
import UIKit
import CoreData
public class CoreDataController: NSObject {
public var managedObjectContext: NSManagedObjectContext
private static var _sharedInstance : CoreDataController?
public static var sharedInstance : CoreDataController {
get {
if _sharedInstance != nil {
return _sharedInstance!
}else{
_sharedInstance = CoreDataController()
return _sharedInstance!
}
}
}
func save() {
do {
let _ = try self.managedObjectContext.save()
}catch _ {
exeption("Unable to save")
}
}
public static var storeUrl : NSURL {
let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
let docURL = urls[urls.endIndex-1]
/* The directory the application uses to store the Core Data store file.
This code uses a file named "DataModel.sqlite" in the application's documents directory.
*/
return docURL.URLByAppendingPathComponent(CoreDataController.storageFile())
}
public class func storageFile() -> String {
return "<#YourName#>.sqlite"
}
public class func storeType() -> String {
return NSSQLiteStoreType
}
private override init() {
// This resource is the same name as your xcdatamodeld contained in your project.
guard let modelURL = NSBundle(forClass:CoreDataController.classForCoder()).URLForResource("<#YourModel#>", withExtension:"momd") else {
fatalError("Error loading model from bundle")
}
// The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.
guard let mom = NSManagedObjectModel(contentsOfURL: modelURL) else {
fatalError("Error initializing mom from: \(modelURL)")
}
let psc = NSPersistentStoreCoordinator(managedObjectModel: mom)
self.managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
self.managedObjectContext.persistentStoreCoordinator = psc
let storeURL = CoreDataController.storeUrl
do {
try psc.addPersistentStoreWithType(CoreDataController.storeType(), configuration: nil, URL: storeURL, options: nil)
} catch {
fatalError("Error migrating store: \(error)")
}
super.init()
}
}
public class CoreDataInMemoryController : CoreDataController {
override public class func storeType() -> String {
return NSInMemoryStoreType
}
override public class func storageFile() -> String {
return "InMemory"+super.storageFile()
}
}
extension NSManagedObject {
class var entityName : String {
get {
return String(self.classForCoder())
}
}
static func findAll(controller : CoreDataController = CoreDataController.sharedInstance) -> [NSManagedObject] {
let request = NSFetchRequest(entityName: self.classForCoder().entityName)
if let result = try? controller.managedObjectContext.executeFetchRequest(request) as! [NSManagedObject]
{
return result
}
return []
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment