mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-05-13 11:58:17 +08:00
Fixes to enable RestKit Core Data to be easily unit tested from a Unit Testing bundle. Improved thread safety in the request queue and fixed an issue where requests dispatched from background threads would not get callback methods due to thread termination. The request queue now guarantees requests are sent from the main thread.
This commit is contained in:
@@ -66,7 +66,8 @@ static NSString* const RKManagedObjectStoreThreadDictionaryEntityCacheKey = @"RK
|
||||
_pathToStoreFile = [[nilOrDirectoryPath stringByAppendingPathComponent:_storeFilename] retain];
|
||||
|
||||
if (nilOrManagedObjectModel == nil) {
|
||||
nilOrManagedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
|
||||
// NOTE: allBundles permits Core Data setup in unit tests
|
||||
nilOrManagedObjectModel = [NSManagedObjectModel mergedModelFromBundles:[NSBundle allBundles]];
|
||||
}
|
||||
_managedObjectModel = [nilOrManagedObjectModel retain];
|
||||
|
||||
@@ -188,8 +189,7 @@ static NSString* const RKManagedObjectStoreThreadDictionaryEntityCacheKey = @"RK
|
||||
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 {
|
||||
} else {
|
||||
NSAssert(NO, @"Managed object store failed to create persistent store coordinator: %@", error);
|
||||
}
|
||||
}
|
||||
@@ -234,11 +234,11 @@ static NSString* const RKManagedObjectStoreThreadDictionaryEntityCacheKey = @"RK
|
||||
NSMutableDictionary* threadDictionary = [[NSThread currentThread] threadDictionary];
|
||||
NSManagedObjectContext* backgroundThreadContext = [threadDictionary objectForKey:RKManagedObjectStoreThreadDictionaryContextKey];
|
||||
if (!backgroundThreadContext) {
|
||||
backgroundThreadContext = [self newManagedObjectContext];
|
||||
[threadDictionary setObject:backgroundThreadContext forKey:RKManagedObjectStoreThreadDictionaryContextKey];
|
||||
backgroundThreadContext = [self newManagedObjectContext];
|
||||
[threadDictionary setObject:backgroundThreadContext forKey:RKManagedObjectStoreThreadDictionaryContextKey];
|
||||
[backgroundThreadContext release];
|
||||
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(mergeChanges:)
|
||||
name:NSManagedObjectContextDidSaveNotification
|
||||
object:backgroundThreadContext];
|
||||
@@ -249,8 +249,8 @@ static NSString* const RKManagedObjectStoreThreadDictionaryEntityCacheKey = @"RK
|
||||
- (void)mergeChangesOnMainThreadWithNotification:(NSNotification*)notification {
|
||||
assert([NSThread isMainThread]);
|
||||
[self.managedObjectContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
|
||||
withObject:notification
|
||||
waitUntilDone:YES];
|
||||
withObject:notification
|
||||
waitUntilDone:YES];
|
||||
}
|
||||
|
||||
- (void)mergeChanges:(NSNotification *)notification {
|
||||
|
||||
Reference in New Issue
Block a user