Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save embassem/0c82af0c808ac60d73d9 to your computer and use it in GitHub Desktop.
Save embassem/0c82af0c808ac60d73d9 to your computer and use it in GitHub Desktop.
NSManagedObjectContext extension methods to delete all managed objects, or all objects of a given type in the context.
//
// Created by Collin Donnell on 7/22/15.
// Copyright (c) 2015 Collin Donnell. All rights reserved.
//
import CoreData
extension NSManagedObjectContext {
convenience init(parentContext parent: NSManagedObjectContext, concurrencyType: NSManagedObjectContextConcurrencyType) {
self.init(concurrencyType: concurrencyType)
parentContext = parent
}
func deleteAllObjects(error: NSErrorPointer) {
if let entitesByName = persistentStoreCoordinator?.managedObjectModel.entitiesByName as? [String: NSEntityDescription] {
for (name, entityDescription) in entitesByName {
deleteAllObjectsForEntity(entityDescription, error: error)
// If there's a problem, bail on the whole operation.
if error.memory != nil {
return
}
}
}
}
func deleteAllObjectsForEntity(entity: NSEntityDescription, error: NSErrorPointer) {
let fetchRequest = NSFetchRequest()
fetchRequest.entity = entity
fetchRequest.fetchBatchSize = 50
let fetchResults = executeFetchRequest(fetchRequest, error: error)
if error.memory != nil {
return
}
if let managedObjects = fetchResults as? [NSManagedObject] {
for object in managedObjects {
deleteObject(object)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment