Skip to content

Commit

Permalink
Merge pull request magicalpanda#238 from blackgold9/BadModelCleanup
Browse files Browse the repository at this point in the history
Bad model cleanup
  • Loading branch information
blackgold9 committed Sep 6, 2012
2 parents db0c254 + 4f0cec7 commit fe25648
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 5 deletions.
28 changes: 23 additions & 5 deletions Categories/NSPersistentStoreCoordinator+MagicalRecord.m
Expand Up @@ -70,12 +70,30 @@ - (NSPersistentStore *) MR_addSqliteStoreNamed:(id)storeFileName withOptions:(__
[self MR_createPathToStoreFileIfNeccessary:url];

NSPersistentStore *store = [self addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:url
options:options
error:&error];
if (!store)
configuration:nil
URL:url
options:options
error:&error];

if (!store && [MagicalRecord shouldDeleteStoreOnModelMismatch])
{
if ([error.domain isEqualToString:NSCocoaErrorDomain] &&
[error code] == NSMigrationMissingSourceModelError) {
// Could not open the database, so... kill it!
[[NSFileManager defaultManager] removeItemAtURL:url error:nil];

// Try one more time to create the store
store = [self addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:url
options:options
error:&error];
if (store) {
// If we successfully added a store, remove the error that was initially created
error = nil;
}
}

[MagicalRecord handleErrors:error];
}
return store;
Expand Down
8 changes: 8 additions & 0 deletions Core/MagicalRecord+Options.h
Expand Up @@ -20,6 +20,14 @@
+ (void) setShouldAutoCreateManagedObjectModel:(BOOL)shouldAutoCreate;
+ (BOOL) shouldAutoCreateDefaultPersistentStoreCoordinator;
+ (void) setShouldAutoCreateDefaultPersistentStoreCoordinator:(BOOL)shouldAutoCreate;
+ (void) setShouldDeleteStoreOnModelMismatch:(BOOL)shouldDeleteStoreOnModelMismatch;

/*!
@method shouldDeleteStoreOnModelMistmatch
@abstract If true, when configuring the persistant store coordinator, and Magical Record encounters a store that does not match the model, it will attempt to remove it and re-create a new store.
This is extremely useful during development where every model change could potentially require a delete/reinstall of the app.
*/
+ (BOOL) shouldDeleteStoreOnModelMismatch;


@end
11 changes: 11 additions & 0 deletions Core/MagicalRecord+Options.m
Expand Up @@ -10,6 +10,7 @@

static BOOL shouldAutoCreateManagedObjectModel_;
static BOOL shouldAutoCreateDefaultPersistentStoreCoordinator_;
static BOOL shouldDeleteStoreOnModelMismatch_;

@implementation MagicalRecord (Options)

Expand All @@ -35,4 +36,14 @@ + (void) setShouldAutoCreateDefaultPersistentStoreCoordinator:(BOOL)shouldAutoCr
shouldAutoCreateDefaultPersistentStoreCoordinator_ = shouldAutoCreate;
}

+ (BOOL) shouldDeleteStoreOnModelMismatch;
{
return shouldDeleteStoreOnModelMismatch_;
}

+ (void) setShouldDeleteStoreOnModelMismatch:(BOOL)shouldDeleteStoreOnModelMismatch
{
shouldDeleteStoreOnModelMismatch_ = shouldDeleteStoreOnModelMismatch;
}

@end
5 changes: 5 additions & 0 deletions Core/MagicalRecord.m
Expand Up @@ -91,6 +91,11 @@ + (void) initialize;
#endif
[self setShouldAutoCreateManagedObjectModel:YES];
[self setShouldAutoCreateDefaultPersistentStoreCoordinator:NO];
#ifdef DEBUG
[self setShouldDeleteStoreOnModelMismatch:YES];
#else
[self setShouldDeleteStoreOnModelMismatch:NO];
#endif
}
}

Expand Down

0 comments on commit fe25648

Please sign in to comment.