mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-04-23 12:27:52 +08:00
Allow storage in non-Documents directories
Add a new class method that takes a directory parameter, and add a corresponding parameter to the private initializer. The other class methods pass nil for that new parameter. The value for the pathToStoreFile property is now calculated in the initializer, and stored in an instance variable.
This commit is contained in:
committed by
Blake Watters
parent
ecb0a5bd5e
commit
cef335d02b
@@ -37,6 +37,7 @@ extern NSString* const RKManagedObjectStoreDidFailSaveNotification;
|
||||
@interface RKManagedObjectStore : NSObject {
|
||||
NSObject<RKManagedObjectStoreDelegate>* _delegate;
|
||||
NSString* _storeFilename;
|
||||
NSString* _pathToStoreFile;
|
||||
NSManagedObjectModel* _managedObjectModel;
|
||||
NSPersistentStoreCoordinator* _persistentStoreCoordinator;
|
||||
NSObject<RKManagedObjectCache>* _managedObjectCache;
|
||||
@@ -74,12 +75,22 @@ extern NSString* const RKManagedObjectStoreDidFailSaveNotification;
|
||||
+ (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.
|
||||
* 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.
|
||||
*/
|
||||
+ (RKManagedObjectStore*)objectStoreWithStoreFilename:(NSString *)storeFilename usingSeedDatabaseName:(NSString *)nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:(NSManagedObjectModel*)nilOrManagedObjectModel;
|
||||
|
||||
/**
|
||||
* Initialize a new managed object store backed by a SQLite database with the specified filename,
|
||||
* in the specified directory. If no directory is specified, will use the app's Documents
|
||||
* directory. 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.
|
||||
*/
|
||||
+ (RKManagedObjectStore*)objectStoreWithStoreFilename:(NSString *)storeFilename inDirectory:(NSString *)directory usingSeedDatabaseName:(NSString *)nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:(NSManagedObjectModel*)nilOrManagedObjectModel;
|
||||
|
||||
/**
|
||||
* Initialize a new managed object store with a SQLite database with the filename specified
|
||||
* @deprecated
|
||||
|
||||
@@ -13,7 +13,7 @@ NSString* const RKManagedObjectStoreDidFailSaveNotification = @"RKManagedObjectS
|
||||
static NSString* const kRKManagedObjectContextKey = @"RKManagedObjectContext";
|
||||
|
||||
@interface RKManagedObjectStore (Private)
|
||||
- (id)initWithStoreFilename:(NSString *)storeFilename usingSeedDatabaseName:(NSString *)nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:(NSManagedObjectModel*)nilOrManagedObjectModel;
|
||||
- (id)initWithStoreFilename:(NSString *)storeFilename inDirectory:(NSString *)nilOrDirectoryPath usingSeedDatabaseName:(NSString *)nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:(NSManagedObjectModel*)nilOrManagedObjectModel;
|
||||
- (void)createPersistentStoreCoordinator;
|
||||
- (void)createStoreIfNecessaryUsingSeedDatabase:(NSString*)seedDatabase;
|
||||
- (NSString *)applicationDocumentsDirectory;
|
||||
@@ -24,6 +24,7 @@ static NSString* const kRKManagedObjectContextKey = @"RKManagedObjectContext";
|
||||
|
||||
@synthesize delegate = _delegate;
|
||||
@synthesize storeFilename = _storeFilename;
|
||||
@synthesize pathToStoreFile = _pathToStoreFile;
|
||||
@synthesize managedObjectModel = _managedObjectModel;
|
||||
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
|
||||
@synthesize managedObjectCache = _managedObjectCache;
|
||||
@@ -33,24 +34,40 @@ static NSString* const kRKManagedObjectContextKey = @"RKManagedObjectContext";
|
||||
}
|
||||
|
||||
+ (RKManagedObjectStore*)objectStoreWithStoreFilename:(NSString *)storeFilename usingSeedDatabaseName:(NSString *)nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:(NSManagedObjectModel*)nilOrManagedObjectModel {
|
||||
return [[[self alloc] initWithStoreFilename:storeFilename usingSeedDatabaseName:nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:nilOrManagedObjectModel] autorelease];
|
||||
return [[[self alloc] initWithStoreFilename:storeFilename inDirectory:nil usingSeedDatabaseName:nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:nilOrManagedObjectModel] autorelease];
|
||||
}
|
||||
|
||||
+ (RKManagedObjectStore*)objectStoreWithStoreFilename:(NSString *)storeFilename inDirectory:(NSString *)directory usingSeedDatabaseName:(NSString *)nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:(NSManagedObjectModel*)nilOrManagedObjectModel {
|
||||
return [[[self alloc] initWithStoreFilename:storeFilename inDirectory:directory usingSeedDatabaseName:nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:nilOrManagedObjectModel] autorelease];
|
||||
}
|
||||
|
||||
- (id)initWithStoreFilename:(NSString*)storeFilename {
|
||||
return [self initWithStoreFilename:storeFilename usingSeedDatabaseName:nil managedObjectModel:nil];
|
||||
return [self initWithStoreFilename:storeFilename inDirectory:nil usingSeedDatabaseName:nil managedObjectModel:nil];
|
||||
}
|
||||
|
||||
- (id)initWithStoreFilename:(NSString *)storeFilename usingSeedDatabaseName:(NSString *)nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:(NSManagedObjectModel*)nilOrManagedObjectModel {
|
||||
- (id)initWithStoreFilename:(NSString *)storeFilename inDirectory:(NSString *)nilOrDirectoryPath usingSeedDatabaseName:(NSString *)nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:(NSManagedObjectModel*)nilOrManagedObjectModel {
|
||||
self = [self init];
|
||||
if (self) {
|
||||
_storeFilename = [storeFilename retain];
|
||||
|
||||
if( nilOrDirectoryPath == nil ) {
|
||||
nilOrDirectoryPath = [self applicationDocumentsDirectory];
|
||||
}
|
||||
else {
|
||||
BOOL isDir;
|
||||
NSAssert1([[NSFileManager defaultManager] fileExistsAtPath:nilOrDirectoryPath isDirectory:&isDir] && isDir == YES, @"Specified storage directory exists", nilOrDirectoryPath);
|
||||
}
|
||||
_pathToStoreFile = [[nilOrDirectoryPath stringByAppendingPathComponent:_storeFilename] retain];
|
||||
|
||||
if (nilOrManagedObjectModel == nil) {
|
||||
nilOrManagedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
|
||||
}
|
||||
_managedObjectModel = [nilOrManagedObjectModel retain];
|
||||
_managedObjectModel = [nilOrManagedObjectModel retain];
|
||||
|
||||
if (nilOrNameOfSeedDatabaseInMainBundle) {
|
||||
[self createStoreIfNecessaryUsingSeedDatabase:nilOrNameOfSeedDatabaseInMainBundle];
|
||||
}
|
||||
|
||||
[self createPersistentStoreCoordinator];
|
||||
}
|
||||
|
||||
@@ -62,6 +79,8 @@ static NSString* const kRKManagedObjectContextKey = @"RKManagedObjectContext";
|
||||
|
||||
[_storeFilename release];
|
||||
_storeFilename = nil;
|
||||
[_pathToStoreFile release];
|
||||
_pathToStoreFile = nil;
|
||||
[_managedObjectModel release];
|
||||
_managedObjectModel = nil;
|
||||
[_persistentStoreCoordinator release];
|
||||
@@ -114,10 +133,6 @@ static NSString* const kRKManagedObjectContextKey = @"RKManagedObjectContext";
|
||||
return managedObjectContext;
|
||||
}
|
||||
|
||||
- (NSString*)pathToStoreFile {
|
||||
return [[self applicationDocumentsDirectory] stringByAppendingPathComponent:self.storeFilename];
|
||||
}
|
||||
|
||||
- (void)createStoreIfNecessaryUsingSeedDatabase:(NSString*)seedDatabase {
|
||||
if (NO == [[NSFileManager defaultManager] fileExistsAtPath:self.pathToStoreFile]) {
|
||||
NSString* seedDatabasePath = [[NSBundle mainBundle] pathForResource:seedDatabase ofType:nil];
|
||||
|
||||
Reference in New Issue
Block a user