Created
September 1, 2011 16:11
-
-
Save anonymous/1186528 to your computer and use it in GitHub Desktop.
DatabaseManager.m - Pratiksha Bhisikar
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 "DatabaseManager.h" | |
@interface DatabaseManager (Private) | |
static DatabaseManager *object = nil; | |
- (NSURL *)applicationDocumentsDirectory; | |
- (NSManagedObjectContext *) managedObjectContext; | |
- (NSManagedObjectModel *)managedObjectModel; | |
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator; | |
@end | |
@implementation DatabaseManager | |
@dynamic managedObjectModel, managedObjectContext, persistentStoreCoordinator; | |
#pragma mark - | |
#pragma mark Singleton Methods | |
+ (DatabaseManager*)sharedManager | |
{ | |
if (object == nil) { | |
object = [[super allocWithZone:NULL] init]; | |
} | |
return object; | |
} | |
+ (id)allocWithZone:(NSZone *)zone | |
{ | |
return [self sharedManager]; | |
} | |
- (id)copyWithZone:(NSZone *)zone | |
{ | |
return self; | |
} | |
- (id)retain | |
{ | |
return self; | |
} | |
- (NSUInteger)retainCount | |
{ | |
return NSUIntegerMax; //denotes an object that cannot be released | |
} | |
- (void)release | |
{ | |
//do nothing | |
} | |
- (id)autorelease | |
{ | |
return self; | |
} | |
#pragma mark - | |
#pragma mark Application's Documents directory | |
+(NSString *) filePath:(NSString *) fileName { | |
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); | |
NSString *documentsDirectory = [paths objectAtIndex:0]; | |
NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:fileName]; | |
return dbPath; | |
} | |
/** | |
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 by merging all of the models found in the application bundle. | |
*/ | |
- (NSManagedObjectModel *)managedObjectModel { | |
if (managedObjectModel != nil) { | |
return managedObjectModel; | |
} | |
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain]; | |
return managedObjectModel; | |
} | |
/** | |
Returns the persistent store coordinator for the application. | |
If the coordinator doesn't already exist, it is created and the application's store added to it. | |
*/ | |
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { | |
if (persistentStoreCoordinator != nil) { | |
return persistentStoreCoordinator; | |
} | |
NSString *databaseFilePath = [DatabaseManager filePath:@"Poker.sqlite"]; | |
NSURL *storeURL = [NSURL fileURLWithPath: databaseFilePath]; | |
NSError *error = nil; | |
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; | |
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { | |
NSLog(@"Unresolved error %@, %@", error, [error userInfo]); | |
abort(); | |
} | |
return persistentStoreCoordinator; | |
} | |
-(void) close { | |
[managedObjectModel release]; | |
[managedObjectContext release]; | |
[persistentStoreCoordinator release]; | |
[super dealloc]; | |
} | |
#pragma mark - | |
#pragma mark Database tasks | |
-(BOOL) setCleared:(BOOL) cleared forLevelNumber:(NSUInteger) levelNumber { | |
BOOL success; | |
NSManagedObjectContext *context = [self managedObjectContext]; | |
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; | |
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Level" inManagedObjectContext:context]; | |
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"LevelNumber == %@", [NSNumber numberWithInt:levelNumber]]; | |
[fetchRequest setEntity:entity]; | |
[fetchRequest setPredicate:predicate]; | |
NSError *error = nil; | |
NSArray *fetchResult = [context executeFetchRequest:fetchRequest error:&error]; | |
if (fetchResult == nil) { | |
// Handle the error... | |
}else { | |
if ([fetchResult count] > 0) { | |
Level *alevel = (Level *)[fetchResult objectAtIndex:0]; | |
alevel.Cleared = [NSNumber numberWithBool:cleared]; | |
if ([context save:&error]) { | |
success = YES; | |
}else { | |
// Handle the error... | |
} | |
} | |
} | |
[fetchRequest release]; | |
return success; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment