mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-01-13 09:30:46 +08:00
More improvements to the managed object store and seeding API's
This commit is contained in:
@@ -8,6 +8,9 @@
|
||||
|
||||
#import "../ObjectMapping/ObjectMapping.h"
|
||||
|
||||
// The default seed database filename. Used when the object store has not been initialized
|
||||
extern NSString* const RKDefaultSeedDatabaseFileName;
|
||||
|
||||
@protocol RKManagedObjectSeederDelegate
|
||||
@required
|
||||
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
- (void)seedObjectsFromFileNames:(NSArray*)fileNames;
|
||||
@end
|
||||
|
||||
NSString* const RKDefaultSeedDatabaseFileName = @"RKSeedDatabase.sqlite";
|
||||
|
||||
@implementation RKManagedObjectSeeder
|
||||
|
||||
@synthesize delegate = _delegate;
|
||||
@@ -46,6 +48,11 @@
|
||||
if (self) {
|
||||
_manager = [manager retain];
|
||||
|
||||
// If the user hasn't configured an object store, set one up for them
|
||||
if (nil == _manager.objectStore) {
|
||||
_manager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:RKDefaultSeedDatabaseFileName];
|
||||
}
|
||||
|
||||
// Delete any existing persistent store
|
||||
[_manager.objectStore deletePersistantStore];
|
||||
}
|
||||
@@ -123,7 +130,7 @@
|
||||
NSString* storeFileName = [[_manager objectStore] storeFilename];
|
||||
NSString* destinationPath = [basePath stringByAppendingPathComponent:storeFileName];
|
||||
NSLog(@"[RestKit] RKManagedObjectSeeder: A seeded database has been generated at '%@'. "
|
||||
@"Please execute `open %@` in your Terminal and copy %@ to your app. Be sure to add the seed database to your \"Copy Resources\" build phase.",
|
||||
@"Please execute `open \"%@\"` in your Terminal and copy %@ to your app. Be sure to add the seed database to your \"Copy Resources\" build phase.",
|
||||
destinationPath, basePath, storeFileName);
|
||||
|
||||
exit(1);
|
||||
|
||||
@@ -50,14 +50,20 @@ extern NSString* const RKManagedObjectStoreDidFailSaveNotification;
|
||||
/**
|
||||
* Initialize a new managed object store with a SQLite database with the filename specified
|
||||
*/
|
||||
- (id)initWithStoreFilename:(NSString*)storeFilename;
|
||||
+ (RKManagedObjectStore*)objectStoreWithStoreFilename:(NSString*)storeFilename;
|
||||
|
||||
/**
|
||||
* Initialize a new managed object store backed by a SQLite database with the specified filename. If a seed database name is provided
|
||||
* and no existing database is found, initialize the store by copying the seed database from the main bundle. If the managed object model
|
||||
* provided is nil, all models will be merged from the main bundle for you.
|
||||
*/
|
||||
- (id)initWithStoreFilename:(NSString *)storeFilename usingSeedDatabaseName:(NSString *)nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:(NSManagedObjectModel*)nilOrManagedObjectModel;
|
||||
+ (RKManagedObjectStore*)objectStoreWithStoreFilename:(NSString *)storeFilename usingSeedDatabaseName:(NSString *)nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:(NSManagedObjectModel*)nilOrManagedObjectModel;
|
||||
|
||||
/**
|
||||
* Initialize a new managed object store with a SQLite database with the filename specified
|
||||
* @deprecated
|
||||
*/
|
||||
- (id)initWithStoreFilename:(NSString*)storeFilename DEPRECATED_ATTRIBUTE;
|
||||
|
||||
/**
|
||||
* Save the current contents of the managed object store
|
||||
@@ -89,5 +95,4 @@ extern NSString* const RKManagedObjectStoreDidFailSaveNotification;
|
||||
*/
|
||||
- (RKManagedObject*)findOrCreateInstanceOfManagedObject:(Class)class withPrimaryKeyValue:(id)primaryKeyValue;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@@ -13,6 +13,7 @@ NSString* const RKManagedObjectStoreDidFailSaveNotification = @"RKManagedObjectS
|
||||
static NSString* const kRKManagedObjectContextKey = @"RKManagedObjectContext";
|
||||
|
||||
@interface RKManagedObjectStore (Private)
|
||||
- (id)initWithStoreFilename:(NSString *)storeFilename usingSeedDatabaseName:(NSString *)nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:(NSManagedObjectModel*)nilOrManagedObjectModel;
|
||||
- (void)createPersistentStoreCoordinator;
|
||||
- (void)createStoreIfNecessaryUsingSeedDatabase:(NSString*)seedDatabase;
|
||||
- (NSString *)applicationDocumentsDirectory;
|
||||
@@ -26,15 +27,26 @@ static NSString* const kRKManagedObjectContextKey = @"RKManagedObjectContext";
|
||||
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
|
||||
@synthesize managedObjectCache = _managedObjectCache;
|
||||
|
||||
+ (RKManagedObjectStore*)objectStoreWithStoreFilename:(NSString*)storeFilename {
|
||||
return [self objectStoreWithStoreFilename:storeFilename usingSeedDatabaseName:nil managedObjectModel:nil];
|
||||
}
|
||||
|
||||
+ (RKManagedObjectStore*)objectStoreWithStoreFilename:(NSString *)storeFilename usingSeedDatabaseName:(NSString *)nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:(NSManagedObjectModel*)nilOrManagedObjectModel {
|
||||
return [[[self alloc] initWithStoreFilename:storeFilename usingSeedDatabaseName:nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:nilOrManagedObjectModel] autorelease];
|
||||
}
|
||||
|
||||
- (id)initWithStoreFilename:(NSString*)storeFilename {
|
||||
return self = [self initWithStoreFilename:storeFilename usingSeedDatabaseName:nil managedObjectModel:[NSManagedObjectModel mergedModelFromBundles:nil]];
|
||||
return self = [self initWithStoreFilename:storeFilename usingSeedDatabaseName:nil managedObjectModel:nil];
|
||||
}
|
||||
|
||||
- (id)initWithStoreFilename:(NSString *)storeFilename usingSeedDatabaseName:(NSString *)nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:(NSManagedObjectModel*)nilOrManagedObjectModel {
|
||||
self = [self init];
|
||||
if (self) {
|
||||
_storeFilename = [storeFilename retain];
|
||||
_managedObjectModel = [nilOrManagedObjectModel retain];
|
||||
if (nilOrManagedObjectModel == nil) {
|
||||
nilOrManagedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
|
||||
}
|
||||
_managedObjectModel = [nilOrManagedObjectModel retain];
|
||||
if (nilOrNameOfSeedDatabaseInMainBundle) {
|
||||
[self createStoreIfNecessaryUsingSeedDatabase:nilOrNameOfSeedDatabaseInMainBundle];
|
||||
}
|
||||
@@ -109,7 +121,7 @@ static NSString* const kRKManagedObjectContextKey = @"RKManagedObjectContext";
|
||||
NSError* error = nil;
|
||||
if (NO == [[NSFileManager defaultManager] fileExistsAtPath:self.pathToStoreFile]) {
|
||||
NSString* seedDatabasePath = [[NSBundle mainBundle] pathForResource:seedDatabase ofType:nil];
|
||||
NSAssert1(seedDatabasePath, @"Unable to find seed database file '%@' in the Main Bundle, aborting...", seedDatabasePath);
|
||||
NSAssert1(seedDatabasePath, @"Unable to find seed database file '%@' in the Main Bundle, aborting...", seedDatabase);
|
||||
NSLog(@"No existing database found, copying from seed path '%@'", seedDatabasePath);
|
||||
[[NSFileManager defaultManager] copyItemAtPath:seedDatabasePath toPath:self.pathToStoreFile error:&error];
|
||||
if (error) {
|
||||
|
||||
Reference in New Issue
Block a user