// // CoreDataManager.m // ThePaperDemo // // Created by scar1900 on 14/11/10. // Copyright (c) 2014年 scar1900. All rights reserved. // #import "CoreDataManager.h" @interface CoreDataManager() { } @end @implementation CoreDataManager @synthesize managedObjectContext = _managedObjectContext; @synthesize managedObjectModel = _managedObjectModel; @synthesize persistentStoreCoordinator = _persistentStoreCoordinator; +(CoreDataManager *)shareInstance { static dispatch_once_t pred; static CoreDataManager *shared = nil; dispatch_once(&pred, ^{ shared = [[CoreDataManager alloc] init]; }); return shared; } + (void)clearInstance { CoreDataManager *shared = [CoreDataManager shareInstance]; shared = nil; } #pragma mark -- #pragma mark function - (void)saveContext { NSError *error = nil; NSManagedObjectContext *managedObjectContext =self.managedObjectContext; if (managedObjectContext !=nil) { if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) { NSLog(@"Unresolvederror %@, %@", error, [error userInfo]); abort(); } } } #pragma mark - #pragma mark Application's Documents directory /** Returns the URL to the application's Documents directory. */ - (NSURL *)applicationDocumentsDirectory { return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; } #pragma mark - #pragma mark Core Data stack /** Returns the managed object context for the application. If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application. */ - (NSManagedObjectContext *)managedObjectContext { if (_managedObjectContext != nil) { return _managedObjectContext; } NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; if (coordinator != nil) { _managedObjectContext = [[NSManagedObjectContext alloc] init]; [_managedObjectContext setPersistentStoreCoordinator:coordinator]; } return _managedObjectContext; } /** Returns the managed object model for the application. If the model doesn't already exist, it is created from the application's model. */ - (NSManagedObjectModel *)managedObjectModel { if (_managedObjectModel != nil) { return _managedObjectModel; } NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TPCoreDataModal" withExtension:@"momd"]; _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; return _managedObjectModel; } - (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (_persistentStoreCoordinator !=nil) { return _persistentStoreCoordinator; } NSURL *storeURL = [[self applicationDocumentsDirectory]URLByAppendingPathComponent:@"TPCoreDataModal.sqlite"]; NSError *error = nil; _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:[self managedObjectModel]]; if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { NSLog(@"Unresolvederror %@, %@", error, [error userInfo]); abort(); } return _persistentStoreCoordinator; } - (void)deleteCoreDataFile { //Erase the persistent store from coordinator and also file manager. NSPersistentStore *store = [self.persistentStoreCoordinator.persistentStores lastObject]; NSError *error = nil; NSURL *storeURL = store.URL; [self.persistentStoreCoordinator removePersistentStore:store error:&error]; [[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error]; NSLog(@"Data Reset"); //Make new persistent store for future saves (Taken From Above Answer) if (![self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { NSLog(@"Unresolvederror %@, %@", error, [error userInfo]); abort(); } } - (void)deleteCoreDataFileWhenUpdate { NSURL *storeURL = [[self applicationDocumentsDirectory]URLByAppendingPathComponent:@"TPCoreDataModal.sqlite"]; //Erase the persistent store from coordinator and also file manager. // NSPersistentStore *store = [self.persistentStoreCoordinator.persistentStores lastObject]; NSError *error = nil; // NSURL *storeURL = store.URL; // [self.persistentStoreCoordinator removePersistentStore:store error:&error]; [[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error]; NSLog(@"Data Reset"); } @end