Skip to content

Instantly share code, notes, and snippets.

Created September 1, 2011 16:11
Show Gist options
  • Save anonymous/1186528 to your computer and use it in GitHub Desktop.
Save anonymous/1186528 to your computer and use it in GitHub Desktop.
DatabaseManager.m - Pratiksha Bhisikar
#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