This is how I make the "reset data" function in several applications:
- (void)reset { // Release CoreData chain [_managedObjectContext release]; _managedObjectContext = nil; [_managedObjectModel release]; _managedObjectModel = nil; [_persistentStoreCoordinator release]; _persistentStoreCoordinator = nil; // Delete the sqlite file NSError *error = nil; if ([fileManager fileExistsAtPath:_storeURL.path]) [fileManager removeItemAtURL:_storeURL error:&error]; // handle error... }
Basically, I just release the CoreData chain and then delete the persistentStore file. This is what you are trying to do without using removePersistentStore , which is all the same to me, as I will just rebuild the persistentStore coordinator later. Then, the next time the kernel data is called, the chain is rebuilt transparently using constructors with the same type design:
- (NSManagedObjectModel *) managedObjectModel { if (!_managedObjectModel) _managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain]; return _managedObjectModel; }
source share