Last active
May 10, 2016 12:20
-
-
Save celian-m/d7d08b7a9f58cfac42e2d0ee1862198f to your computer and use it in GitHub Desktop.
Core Data Manager for Swift usage
This file contains hidden or 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
// | |
// 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