mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-04-23 20:31:13 +08:00
Convert all tabs to four spaces. refs #743
This commit is contained in:
@@ -75,7 +75,7 @@ static RKManagedObjectStore *defaultObjectStore = nil;
|
||||
+ (void)deleteStoreAtPath:(NSString *)path
|
||||
{
|
||||
NSURL* storeURL = [NSURL fileURLWithPath:path];
|
||||
NSError* error = nil;
|
||||
NSError* error = nil;
|
||||
if ([[NSFileManager defaultManager] fileExistsAtPath:storeURL.path]) {
|
||||
if (! [[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error]) {
|
||||
NSAssert(NO, @"Managed object store failed to delete persistent store : %@", error);
|
||||
@@ -104,35 +104,35 @@ static RKManagedObjectStore *defaultObjectStore = nil;
|
||||
}
|
||||
|
||||
- (id)initWithStoreFilename:(NSString*)storeFilename {
|
||||
return [self initWithStoreFilename:storeFilename inDirectory:nil usingSeedDatabaseName:nil managedObjectModel:nil delegate:nil];
|
||||
return [self initWithStoreFilename:storeFilename inDirectory:nil usingSeedDatabaseName:nil managedObjectModel:nil delegate:nil];
|
||||
}
|
||||
|
||||
- (id)initWithStoreFilename:(NSString *)storeFilename inDirectory:(NSString *)nilOrDirectoryPath usingSeedDatabaseName:(NSString *)nilOrNameOfSeedDatabaseInMainBundle managedObjectModel:(NSManagedObjectModel*)nilOrManagedObjectModel delegate:(id)delegate {
|
||||
self = [self init];
|
||||
if (self) {
|
||||
_storeFilename = [storeFilename retain];
|
||||
if (self) {
|
||||
_storeFilename = [storeFilename retain];
|
||||
|
||||
if (nilOrDirectoryPath == nil) {
|
||||
nilOrDirectoryPath = [RKDirectory applicationDataDirectory];
|
||||
} else {
|
||||
BOOL isDir;
|
||||
NSAssert1([[NSFileManager defaultManager] fileExistsAtPath:nilOrDirectoryPath isDirectory:&isDir] && isDir == YES, @"Specified storage directory exists", nilOrDirectoryPath);
|
||||
}
|
||||
_pathToStoreFile = [[nilOrDirectoryPath stringByAppendingPathComponent:_storeFilename] retain];
|
||||
if (nilOrDirectoryPath == nil) {
|
||||
nilOrDirectoryPath = [RKDirectory applicationDataDirectory];
|
||||
} 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) {
|
||||
// NOTE: allBundles permits Core Data setup in unit tests
|
||||
nilOrManagedObjectModel = [NSManagedObjectModel mergedModelFromBundles:[NSBundle allBundles]];
|
||||
nilOrManagedObjectModel = [NSManagedObjectModel mergedModelFromBundles:[NSBundle allBundles]];
|
||||
}
|
||||
NSMutableArray* allManagedObjectModels = [NSMutableArray arrayWithObject:nilOrManagedObjectModel];
|
||||
_managedObjectModel = [[NSManagedObjectModel modelByMergingModels:allManagedObjectModels] retain];
|
||||
NSMutableArray* allManagedObjectModels = [NSMutableArray arrayWithObject:nilOrManagedObjectModel];
|
||||
_managedObjectModel = [[NSManagedObjectModel modelByMergingModels:allManagedObjectModels] retain];
|
||||
_delegate = delegate;
|
||||
|
||||
if (nilOrNameOfSeedDatabaseInMainBundle) {
|
||||
[self createStoreIfNecessaryUsingSeedDatabase:nilOrNameOfSeedDatabaseInMainBundle];
|
||||
}
|
||||
|
||||
[self createPersistentStoreCoordinator];
|
||||
[self createPersistentStoreCoordinator];
|
||||
self.primaryManagedObjectContext = [[self newManagedObjectContext] autorelease];
|
||||
|
||||
_cacheStrategy = [RKInMemoryManagedObjectCache new];
|
||||
@@ -144,9 +144,9 @@ static RKManagedObjectStore *defaultObjectStore = nil;
|
||||
if (! defaultObjectStore) {
|
||||
[RKManagedObjectStore setDefaultObjectStore:self];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return self;
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)setThreadLocalObject:(id)value forKey:(id)key {
|
||||
@@ -191,24 +191,24 @@ static RKManagedObjectStore *defaultObjectStore = nil;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
[self clearThreadLocalStorage];
|
||||
|
||||
[_storeFilename release];
|
||||
_storeFilename = nil;
|
||||
[_pathToStoreFile release];
|
||||
_pathToStoreFile = nil;
|
||||
[_storeFilename release];
|
||||
_storeFilename = nil;
|
||||
[_pathToStoreFile release];
|
||||
_pathToStoreFile = nil;
|
||||
|
||||
[_managedObjectModel release];
|
||||
_managedObjectModel = nil;
|
||||
_managedObjectModel = nil;
|
||||
[_persistentStoreCoordinator release];
|
||||
_persistentStoreCoordinator = nil;
|
||||
_persistentStoreCoordinator = nil;
|
||||
[_cacheStrategy release];
|
||||
_cacheStrategy = nil;
|
||||
[primaryManagedObjectContext release];
|
||||
primaryManagedObjectContext = nil;
|
||||
|
||||
[super dealloc];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -216,75 +216,75 @@ static RKManagedObjectStore *defaultObjectStore = nil;
|
||||
message to the application's managed object context.
|
||||
*/
|
||||
- (BOOL)save:(NSError **)error {
|
||||
NSManagedObjectContext* moc = [self managedObjectContextForCurrentThread];
|
||||
NSManagedObjectContext* moc = [self managedObjectContextForCurrentThread];
|
||||
NSError *localError = nil;
|
||||
|
||||
@try {
|
||||
if (![moc save:&localError]) {
|
||||
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(managedObjectStore:didFailToSaveContext:error:exception:)]) {
|
||||
[self.delegate managedObjectStore:self didFailToSaveContext:moc error:localError exception:nil];
|
||||
}
|
||||
@try {
|
||||
if (![moc save:&localError]) {
|
||||
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(managedObjectStore:didFailToSaveContext:error:exception:)]) {
|
||||
[self.delegate managedObjectStore:self didFailToSaveContext:moc error:localError exception:nil];
|
||||
}
|
||||
|
||||
NSDictionary* userInfo = [NSDictionary dictionaryWithObject:localError forKey:@"error"];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:RKManagedObjectStoreDidFailSaveNotification object:self userInfo:userInfo];
|
||||
NSDictionary* userInfo = [NSDictionary dictionaryWithObject:localError forKey:@"error"];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:RKManagedObjectStoreDidFailSaveNotification object:self userInfo:userInfo];
|
||||
|
||||
if ([[localError domain] isEqualToString:@"NSCocoaErrorDomain"]) {
|
||||
NSDictionary *userInfo = [localError userInfo];
|
||||
NSArray *errors = [userInfo valueForKey:@"NSDetailedErrors"];
|
||||
if (errors) {
|
||||
for (NSError *detailedError in errors) {
|
||||
NSDictionary *subUserInfo = [detailedError userInfo];
|
||||
RKLogError(@"Core Data Save Error\n \
|
||||
NSLocalizedDescription:\t\t%@\n \
|
||||
NSValidationErrorKey:\t\t\t%@\n \
|
||||
NSValidationErrorPredicate:\t%@\n \
|
||||
NSValidationErrorObject:\n%@\n",
|
||||
[subUserInfo valueForKey:@"NSLocalizedDescription"],
|
||||
[subUserInfo valueForKey:@"NSValidationErrorKey"],
|
||||
[subUserInfo valueForKey:@"NSValidationErrorPredicate"],
|
||||
[subUserInfo valueForKey:@"NSValidationErrorObject"]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
RKLogError(@"Core Data Save Error\n \
|
||||
NSLocalizedDescription:\t\t%@\n \
|
||||
NSValidationErrorKey:\t\t\t%@\n \
|
||||
NSValidationErrorPredicate:\t%@\n \
|
||||
NSValidationErrorObject:\n%@\n",
|
||||
[userInfo valueForKey:@"NSLocalizedDescription"],
|
||||
[userInfo valueForKey:@"NSValidationErrorKey"],
|
||||
[userInfo valueForKey:@"NSValidationErrorPredicate"],
|
||||
[userInfo valueForKey:@"NSValidationErrorObject"]);
|
||||
}
|
||||
}
|
||||
if ([[localError domain] isEqualToString:@"NSCocoaErrorDomain"]) {
|
||||
NSDictionary *userInfo = [localError userInfo];
|
||||
NSArray *errors = [userInfo valueForKey:@"NSDetailedErrors"];
|
||||
if (errors) {
|
||||
for (NSError *detailedError in errors) {
|
||||
NSDictionary *subUserInfo = [detailedError userInfo];
|
||||
RKLogError(@"Core Data Save Error\n \
|
||||
NSLocalizedDescription:\t\t%@\n \
|
||||
NSValidationErrorKey:\t\t\t%@\n \
|
||||
NSValidationErrorPredicate:\t%@\n \
|
||||
NSValidationErrorObject:\n%@\n",
|
||||
[subUserInfo valueForKey:@"NSLocalizedDescription"],
|
||||
[subUserInfo valueForKey:@"NSValidationErrorKey"],
|
||||
[subUserInfo valueForKey:@"NSValidationErrorPredicate"],
|
||||
[subUserInfo valueForKey:@"NSValidationErrorObject"]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
RKLogError(@"Core Data Save Error\n \
|
||||
NSLocalizedDescription:\t\t%@\n \
|
||||
NSValidationErrorKey:\t\t\t%@\n \
|
||||
NSValidationErrorPredicate:\t%@\n \
|
||||
NSValidationErrorObject:\n%@\n",
|
||||
[userInfo valueForKey:@"NSLocalizedDescription"],
|
||||
[userInfo valueForKey:@"NSValidationErrorKey"],
|
||||
[userInfo valueForKey:@"NSValidationErrorPredicate"],
|
||||
[userInfo valueForKey:@"NSValidationErrorObject"]);
|
||||
}
|
||||
}
|
||||
|
||||
if (error) {
|
||||
*error = localError;
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
@catch (NSException* e) {
|
||||
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(managedObjectStore:didFailToSaveContext:error:exception:)]) {
|
||||
[self.delegate managedObjectStore:self didFailToSaveContext:moc error:nil exception:e];
|
||||
}
|
||||
else {
|
||||
@throw;
|
||||
}
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
@catch (NSException* e) {
|
||||
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(managedObjectStore:didFailToSaveContext:error:exception:)]) {
|
||||
[self.delegate managedObjectStore:self didFailToSaveContext:moc error:nil exception:e];
|
||||
}
|
||||
else {
|
||||
@throw;
|
||||
}
|
||||
}
|
||||
|
||||
return YES;
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (NSManagedObjectContext *)newManagedObjectContext {
|
||||
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init];
|
||||
[managedObjectContext setPersistentStoreCoordinator:self.persistentStoreCoordinator];
|
||||
[managedObjectContext setUndoManager:nil];
|
||||
[managedObjectContext setMergePolicy:NSMergeByPropertyStoreTrumpMergePolicy];
|
||||
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init];
|
||||
[managedObjectContext setPersistentStoreCoordinator:self.persistentStoreCoordinator];
|
||||
[managedObjectContext setUndoManager:nil];
|
||||
[managedObjectContext setMergePolicy:NSMergeByPropertyStoreTrumpMergePolicy];
|
||||
managedObjectContext.managedObjectStore = self;
|
||||
|
||||
return managedObjectContext;
|
||||
return managedObjectContext;
|
||||
}
|
||||
|
||||
- (void)createStoreIfNecessaryUsingSeedDatabase:(NSString*)seedDatabase {
|
||||
@@ -293,13 +293,13 @@ static RKManagedObjectStore *defaultObjectStore = nil;
|
||||
NSAssert1(seedDatabasePath, @"Unable to find seed database file '%@' in the Main Bundle, aborting...", seedDatabase);
|
||||
RKLogInfo(@"No existing database found, copying from seed path '%@'", seedDatabasePath);
|
||||
|
||||
NSError* error;
|
||||
NSError* error;
|
||||
if (![[NSFileManager defaultManager] copyItemAtPath:seedDatabasePath toPath:self.pathToStoreFile error:&error]) {
|
||||
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(managedObjectStore:didFailToCopySeedDatabase:error:)]) {
|
||||
[self.delegate managedObjectStore:self didFailToCopySeedDatabase:seedDatabase error:error];
|
||||
} else {
|
||||
RKLogError(@"Encountered an error during seed database copy: %@", [error localizedDescription]);
|
||||
}
|
||||
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(managedObjectStore:didFailToCopySeedDatabase:error:)]) {
|
||||
[self.delegate managedObjectStore:self didFailToCopySeedDatabase:seedDatabase error:error];
|
||||
} else {
|
||||
RKLogError(@"Encountered an error during seed database copy: %@", [error localizedDescription]);
|
||||
}
|
||||
}
|
||||
NSAssert1([[NSFileManager defaultManager] fileExistsAtPath:seedDatabasePath], @"Seed database not found at path '%@'!", seedDatabasePath);
|
||||
}
|
||||
@@ -308,28 +308,28 @@ static RKManagedObjectStore *defaultObjectStore = nil;
|
||||
- (void)createPersistentStoreCoordinator {
|
||||
NSAssert(_managedObjectModel, @"Cannot create persistent store coordinator without a managed object model");
|
||||
NSAssert(!_persistentStoreCoordinator, @"Cannot create persistent store coordinator: one already exists.");
|
||||
NSURL *storeURL = [NSURL fileURLWithPath:self.pathToStoreFile];
|
||||
NSURL *storeURL = [NSURL fileURLWithPath:self.pathToStoreFile];
|
||||
|
||||
NSError *error;
|
||||
NSError *error;
|
||||
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:_managedObjectModel];
|
||||
|
||||
// Allow inferred migration from the original version of the application.
|
||||
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
|
||||
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
|
||||
// Allow inferred migration from the original version of the application.
|
||||
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
|
||||
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
|
||||
|
||||
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
|
||||
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(managedObjectStore:didFailToCreatePersistentStoreCoordinatorWithError:)]) {
|
||||
[self.delegate managedObjectStore:self didFailToCreatePersistentStoreCoordinatorWithError:error];
|
||||
} else {
|
||||
NSAssert(NO, @"Managed object store failed to create persistent store coordinator: %@", error);
|
||||
}
|
||||
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
|
||||
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(managedObjectStore:didFailToCreatePersistentStoreCoordinatorWithError:)]) {
|
||||
[self.delegate managedObjectStore:self didFailToCreatePersistentStoreCoordinatorWithError:error];
|
||||
} else {
|
||||
NSAssert(NO, @"Managed object store failed to create persistent store coordinator: %@", error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)deletePersistentStoreUsingSeedDatabaseName:(NSString *)seedFile {
|
||||
NSURL* storeURL = [NSURL fileURLWithPath:self.pathToStoreFile];
|
||||
NSError* error = nil;
|
||||
NSURL* storeURL = [NSURL fileURLWithPath:self.pathToStoreFile];
|
||||
NSError* error = nil;
|
||||
if ([[NSFileManager defaultManager] fileExistsAtPath:storeURL.path]) {
|
||||
if (![[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error]) {
|
||||
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(managedObjectStore:didFailToDeletePersistentStore:error:)]) {
|
||||
@@ -343,21 +343,21 @@ static RKManagedObjectStore *defaultObjectStore = nil;
|
||||
RKLogWarning(@"Asked to delete persistent store but no store file exists at path: %@", storeURL.path);
|
||||
}
|
||||
|
||||
[_persistentStoreCoordinator release];
|
||||
_persistentStoreCoordinator = nil;
|
||||
[_persistentStoreCoordinator release];
|
||||
_persistentStoreCoordinator = nil;
|
||||
|
||||
if (seedFile) {
|
||||
if (seedFile) {
|
||||
[self createStoreIfNecessaryUsingSeedDatabase:seedFile];
|
||||
}
|
||||
|
||||
[self createPersistentStoreCoordinator];
|
||||
[self createPersistentStoreCoordinator];
|
||||
|
||||
// Recreate the MOC
|
||||
self.primaryManagedObjectContext = [[self newManagedObjectContext] autorelease];
|
||||
}
|
||||
|
||||
- (void)deletePersistentStore {
|
||||
[self deletePersistentStoreUsingSeedDatabaseName:nil];
|
||||
[self deletePersistentStoreUsingSeedDatabaseName:nil];
|
||||
}
|
||||
|
||||
- (NSManagedObjectContext *)managedObjectContextForCurrentThread {
|
||||
@@ -366,34 +366,34 @@ static RKManagedObjectStore *defaultObjectStore = nil;
|
||||
}
|
||||
|
||||
// Background threads leverage thread-local storage
|
||||
NSManagedObjectContext* managedObjectContext = [self threadLocalObjectForKey:RKManagedObjectStoreThreadDictionaryContextKey];
|
||||
if (!managedObjectContext) {
|
||||
managedObjectContext = [self newManagedObjectContext];
|
||||
NSManagedObjectContext* managedObjectContext = [self threadLocalObjectForKey:RKManagedObjectStoreThreadDictionaryContextKey];
|
||||
if (!managedObjectContext) {
|
||||
managedObjectContext = [self newManagedObjectContext];
|
||||
|
||||
// Store into thread local storage dictionary
|
||||
[self setThreadLocalObject:managedObjectContext forKey:RKManagedObjectStoreThreadDictionaryContextKey];
|
||||
[managedObjectContext release];
|
||||
[managedObjectContext release];
|
||||
|
||||
// If we are a background Thread MOC, we need to inform the main thread on save
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(mergeChanges:)
|
||||
name:NSManagedObjectContextDidSaveNotification
|
||||
object:managedObjectContext];
|
||||
}
|
||||
}
|
||||
|
||||
return managedObjectContext;
|
||||
return managedObjectContext;
|
||||
}
|
||||
|
||||
- (void)mergeChangesOnMainThreadWithNotification:(NSNotification*)notification {
|
||||
assert([NSThread isMainThread]);
|
||||
[self.primaryManagedObjectContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
|
||||
withObject:notification
|
||||
waitUntilDone:YES];
|
||||
assert([NSThread isMainThread]);
|
||||
[self.primaryManagedObjectContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
|
||||
withObject:notification
|
||||
waitUntilDone:YES];
|
||||
}
|
||||
|
||||
- (void)mergeChanges:(NSNotification *)notification {
|
||||
// Merge changes into the main context on the main thread
|
||||
[self performSelectorOnMainThread:@selector(mergeChangesOnMainThreadWithNotification:) withObject:notification waitUntilDone:YES];
|
||||
// Merge changes into the main context on the main thread
|
||||
[self performSelectorOnMainThread:@selector(mergeChangesOnMainThreadWithNotification:) withObject:notification waitUntilDone:YES];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
@@ -401,18 +401,18 @@ static RKManagedObjectStore *defaultObjectStore = nil;
|
||||
|
||||
- (NSManagedObject*)objectWithID:(NSManagedObjectID *)objectID {
|
||||
NSAssert(objectID, @"Cannot fetch a managedObject with a nil objectID");
|
||||
return [[self managedObjectContextForCurrentThread] objectWithID:objectID];
|
||||
return [[self managedObjectContextForCurrentThread] objectWithID:objectID];
|
||||
}
|
||||
|
||||
- (NSArray*)objectsWithIDs:(NSArray*)objectIDs {
|
||||
NSMutableArray* objects = [[NSMutableArray alloc] init];
|
||||
for (NSManagedObjectID* objectID in objectIDs) {
|
||||
[objects addObject:[self objectWithID:objectID]];
|
||||
}
|
||||
NSArray* objectArray = [NSArray arrayWithArray:objects];
|
||||
[objects release];
|
||||
NSMutableArray* objects = [[NSMutableArray alloc] init];
|
||||
for (NSManagedObjectID* objectID in objectIDs) {
|
||||
[objects addObject:[self objectWithID:objectID]];
|
||||
}
|
||||
NSArray* objectArray = [NSArray arrayWithArray:objects];
|
||||
[objects release];
|
||||
|
||||
return objectArray;
|
||||
return objectArray;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user