Created
February 3, 2016 02:27
-
-
Save saintc0d3r/34ff319d55d39f536aba to your computer and use it in GitHub Desktop.
iOS Core Data plumbing code in Swift. Put this under your AppDelegate class
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
// MARK: - Core Data Stack | |
// Define application's document directory | |
lazy var applicationDocumentsDirectory: NSURL = { | |
let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) | |
return urls[urls.count-1] | |
}() | |
// Define Managed Object Model | |
lazy var managed_object_model :NSManagedObjectModel = { | |
let model_url = NSBundle.mainBundle().URLForResource("Lifestyle", withExtension: "momd") | |
return NSManagedObjectModel(contentsOfURL: model_url!)! | |
}() | |
// Define persistent store coordinator | |
lazy var persistent_store_coordinator :NSPersistentStoreCoordinator = { | |
let coordinator :NSPersistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managed_object_model) | |
let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("SingleViewCoreData.sqllite") | |
var failure_reason = "There was an error creating or loading the application's saved data" | |
do{ | |
try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil) | |
} | |
catch { | |
// Report any error we got | |
var dict = [String: AnyObject]() | |
dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" | |
dict[NSLocalizedFailureReasonErrorKey] = failure_reason | |
dict[NSUnderlyingErrorKey] = error as NSError | |
let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict) | |
// Replace this with code to handle the error appropriately. | |
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. | |
NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)") | |
abort() | |
} | |
return coordinator | |
}() | |
// Define managed object context | |
lazy var managed_object_context :NSManagedObjectContext = { | |
// Return the managed object context for the application | |
let coordinator = self.persistent_store_coordinator | |
var managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType) | |
managedObjectContext.persistentStoreCoordinator = coordinator | |
return managedObjectContext | |
}() | |
// MARK: - Core Data Saving support | |
func save_context(OnSaveSucceded : (() -> Void)?) { | |
if managed_object_context.hasChanges { | |
do { | |
try managed_object_context.save() | |
if (OnSaveSucceded != nil){ | |
OnSaveSucceded!() | |
} | |
} catch { | |
let nserror = error as NSError | |
NSLog("Unresolved error \(nserror), \(nserror.userInfo)") | |
abort() | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment