How do I delete all objects from my persistent store in Core Data?

后端 未结 8 959
遇见更好的自我
遇见更好的自我 2020-12-01 03:59

I have Core Data working in my app. So, I fetch an XML file, parse the data into model objects and insert them into core data. They are saved in the persistent store and I

相关标签:
8条回答
  • 2020-12-01 04:20

    Here's what I have done to clean my Core Data entirely. It works perfectly. This is if you only have one persistent store which is probably the case if you didn't add one more manually. If your managedObjectContext has the same name as here you can simply copy/past it will work.

    NSError * error;
    // retrieve the store URL
    NSURL * storeURL = [[managedObjectContext persistentStoreCoordinator] URLForPersistentStore:[[[managedObjectContext persistentStoreCoordinator] persistentStores] lastObject]];
    // lock the current context
    [managedObjectContext lock];
    [managedObjectContext reset];//to drop pending changes
    //delete the store from the current managedObjectContext
    if ([[managedObjectContext persistentStoreCoordinator] removePersistentStore:[[[managedObjectContext persistentStoreCoordinator] persistentStores] lastObject] error:&error])
    {
        // remove the file containing the data
        [[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error];
        //recreate the store like in the  appDelegate method
        [[managedObjectContext persistentStoreCoordinator] addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error];//recreates the persistent store
    }
    [managedObjectContext unlock];
    //that's it !
    
    0 讨论(0)
  • 2020-12-01 04:20

    There is a function

    According to WWDC 242, you can use it for clearing a database.

    Also there is a func replacePersistentStore which is replacing the current database with a selected one.

    0 讨论(0)
  • 2020-12-01 04:21

    The fastest way to ditch everything is to send your managed object context the reset message.

    0 讨论(0)
  • 2020-12-01 04:24

    You could loop through all objects and delete them by doing this:

    [managedObjectContext deleteObject:someObject];
    

    If you want to remove all objects it is probably fastest to delete the store and then recreate the CoreData stack.

    0 讨论(0)
  • 2020-12-01 04:34

    Based on @Nicolas Manzini answer I have wrote a Swift 2.1 version with little improvements. I have added an extension to NSManagedObjectContext. Full code below:

    import Foundation
    import CoreData
    
    extension NSManagedObjectContext
    {
        func deleteAllData()
        {
            guard let persistentStore = persistentStoreCoordinator?.persistentStores.last else {
                return
            }
    
            guard let url = persistentStoreCoordinator?.URLForPersistentStore(persistentStore) else {
                return
            }
    
            performBlockAndWait { () -> Void in
                self.reset()
                do
                {
                    try self.persistentStoreCoordinator?.removePersistentStore(persistentStore)
                    try NSFileManager.defaultManager().removeItemAtURL(url)
                    try self.persistentStoreCoordinator?.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil)
                }
                catch { /*dealing with errors up to the usage*/ }
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-01 04:36

    Trash your data file and remake it.

    0 讨论(0)
提交回复
热议问题