Permalink
Browse files

Merge pull request #238 from blackgold9/BadModelCleanup

Bad model cleanup
  • Loading branch information...
blackgold9 committed Sep 6, 2012
2 parents db0c254 + 4f0cec7 commit fe2564853f2892ee112f3f9fbf34213ca9bef710
@@ -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;
@@ -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
@@ -10,6 +10,7 @@
static BOOL shouldAutoCreateManagedObjectModel_;
static BOOL shouldAutoCreateDefaultPersistentStoreCoordinator_;
+static BOOL shouldDeleteStoreOnModelMismatch_;
@implementation MagicalRecord (Options)
@@ -35,4 +36,14 @@ + (void) setShouldAutoCreateDefaultPersistentStoreCoordinator:(BOOL)shouldAutoCr
shouldAutoCreateDefaultPersistentStoreCoordinator_ = shouldAutoCreate;
}
++ (BOOL) shouldDeleteStoreOnModelMismatch;
+{
+ return shouldDeleteStoreOnModelMismatch_;
+}
+
++ (void) setShouldDeleteStoreOnModelMismatch:(BOOL)shouldDeleteStoreOnModelMismatch
+{
+ shouldDeleteStoreOnModelMismatch_ = shouldDeleteStoreOnModelMismatch;
+}
+
@end
View
@@ -91,6 +91,11 @@ + (void) initialize;
#endif
[self setShouldAutoCreateManagedObjectModel:YES];
[self setShouldAutoCreateDefaultPersistentStoreCoordinator:NO];
+#ifdef DEBUG
+ [self setShouldDeleteStoreOnModelMismatch:YES];
+#else
+ [self setShouldDeleteStoreOnModelMismatch:NO];
+#endif
}
}

0 comments on commit fe25648

Please sign in to comment.