Created
March 18, 2010 15:44
-
-
Save lukeredpath/336485 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
| #import "CoreDataDemoAppDelegate.h" | |
| #import "CoreDataManager.h" | |
| @implementation CoreDataDemoAppDelegate | |
| @synthesize window; | |
| #pragma mark - | |
| #pragma mark Application lifecycle | |
| - (void)applicationDidFinishLaunching:(UIApplication *)application | |
| { | |
| NSPersistentStoreCoordinator *storeCoordinator = [CoreDataManager newPersistentStoreCoordinatorForModel:[NSManagedObjectModel mergedModelFromBundles:nil] withStoreType:NSSQLiteStoreType storePath:@"CoreData.sqlite"]; | |
| [[CoreDataManager sharedManager] setPersistentStoreCoordinator:storeCoordinator]; | |
| [storeCoordinator release]; | |
| [[CoreDataManager sharedManager] registerDefaultManagedObjectContext]; | |
| [window makeKeyAndVisible]; | |
| } | |
| - (void)applicationWillTerminate:(UIApplication *)application | |
| { | |
| [[CoreDataManager sharedManager] prepareForExit]; | |
| } | |
| #pragma mark - | |
| #pragma mark Memory management | |
| - (void)dealloc | |
| { | |
| [window release]; | |
| [super dealloc]; | |
| } | |
| @end |
This file contains hidden or 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
| @interface CoreDataManager : NSObject { | |
| NSMutableDictionary *managedObjectContexts; | |
| NSString *defaultContextKey; | |
| NSPersistentStoreCoordinator *persistentStoreCoordinator; | |
| } | |
| + (id)sharedManager; | |
| @property (nonatomic, retain) NSPersistentStoreCoordinator *persistentStoreCoordinator; | |
| - (void)prepareForExit; | |
| - (NSManagedObjectContext *)managedObjectContextForKey:(NSString *)key; | |
| - (NSManagedObjectContext *)defaultManagedObjectContext; | |
| - (void)registerNewManagedObjectContextForKey:(NSString *)key isDefault:(BOOL)isDefault; | |
| - (void)registerDefaultManagedObjectContext; | |
| + (id)newPersistentStoreCoordinatorForModel:(NSManagedObjectModel *)model withStoreType:(NSString *)storeType storePath:(NSString *)pathToStoreFile; | |
| @end |
This file contains hidden or 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
| // | |
| // CoreDataManager.m | |
| // CoreDataDemo | |
| // | |
| // Created by Luke Redpath on 18/03/2010. | |
| // Copyright 2010 LJR Software Limited. All rights reserved. | |
| // | |
| #import "CoreDataManager.h" | |
| #import "UIApplication+Directories.h" | |
| static NSString *CoreDataManagerDefaultContextKey = @"CoreDataManagerDefaultContextKey"; | |
| @implementation CoreDataManager | |
| @synthesize persistentStoreCoordinator; | |
| - (void)dealloc; | |
| { | |
| [persistentStoreCoordinator release]; | |
| [managedObjectContexts release]; | |
| [defaultContextKey release]; | |
| [super dealloc]; | |
| } | |
| - (id)init; | |
| { | |
| if (self = [super init]) { | |
| managedObjectContexts = [[NSMutableDictionary alloc] init]; | |
| } | |
| return self; | |
| } | |
| - (void)prepareForExit; | |
| { | |
| for (NSManagedObjectContext *context in [managedObjectContexts allValues]) { | |
| if ([context hasChanges]) { | |
| [context save:nil]; | |
| } | |
| } | |
| } | |
| #pragma mark - | |
| #pragma mark NSManagedObjectContext registration | |
| - (NSManagedObjectContext *)managedObjectContextForKey:(NSString *)key; | |
| { | |
| return [managedObjectContexts objectForKey:key]; | |
| } | |
| - (NSManagedObjectContext *)defaultManagedObjectContext; | |
| { | |
| return [managedObjectContexts objectForKey:defaultContextKey]; | |
| } | |
| - (void)registerNewManagedObjectContextForKey:(NSString *)key isDefault:(BOOL)isDefault; | |
| { | |
| NSAssert1(![managedObjectContexts.allKeys containsObject:key], | |
| @"Duplicate key, managed object context already registered for key %@", key); | |
| NSAssert(self.persistentStoreCoordinator != nil, | |
| @"A persistent store coordinator is required to create managed object contexts"); | |
| NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init]; | |
| [managedObjectContext setPersistentStoreCoordinator:self.persistentStoreCoordinator]; | |
| [managedObjectContexts setObject:managedObjectContext forKey:key]; | |
| if (isDefault == YES) { | |
| defaultContextKey = [key copy]; | |
| } | |
| } | |
| - (void)registerDefaultManagedObjectContext; | |
| { | |
| [self registerNewManagedObjectContextForKey:CoreDataManagerDefaultContextKey isDefault:YES]; | |
| } | |
| #pragma mark - | |
| #pragma mark Factory methods | |
| + (id)newPersistentStoreCoordinatorForModel:(NSManagedObjectModel *)model withStoreType:(NSString *)storeType storePath:(NSString *)storePath; | |
| { | |
| NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; | |
| NSURL *storeUrl = [NSURL fileURLWithPath:[[UIApplication documentsDirectory] stringByAppendingPathComponent:storePath]]; | |
| [coordinator addPersistentStoreWithType:storeType configuration:nil URL:storeUrl options:nil error:nil]; | |
| return coordinator; | |
| } | |
| #pragma mark - | |
| #pragma mark Singleton boilerplate | |
| static id sharedManager = nil; | |
| + (void)initialize | |
| { | |
| if (self == [CoreDataManager class]) { | |
| sharedManager = [[self alloc] init]; | |
| } | |
| } | |
| + (id)sharedManager | |
| { | |
| return sharedManager; | |
| } | |
| @end |
This file contains hidden or 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
| @interface UIApplication (Directories) | |
| + (NSString *)documentsDirectory; | |
| @end |
This file contains hidden or 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
| #import "UIApplication+Directories.h" | |
| @implementation UIApplication (Directories) | |
| + (NSString *)documentsDirectory; | |
| { | |
| return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; | |
| } | |
| @end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment