mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-04-05 09:39:09 +08:00
Merge branch 'master' of github.com:twotoasters/RestKit into managedobjectcleanup
Conflicts: Code/ObjectMapping/RKObjectLoader.m
This commit is contained in:
@@ -146,7 +146,7 @@
|
||||
|
||||
- (void)processLoadModelsInBackground:(RKResponse *)response {
|
||||
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
|
||||
RKManagedObjectStore* objectStore = [[RKObjectManager globalManager] objectStore]; // TODO: Should probably relax singleton...
|
||||
RKManagedObjectStore* objectStore = self.managedObjectStore;
|
||||
|
||||
// If the request was sent through a model, we map the results back into that object
|
||||
// TODO: Note that this assumption may not work in all cases, other approaches?
|
||||
@@ -174,10 +174,10 @@
|
||||
results = [NSArray arrayWithObjects:result, nil];
|
||||
}
|
||||
|
||||
if (self.managedObjectStore && [self.managedObjectStore managedObjectCache]) {
|
||||
if (objectStore && [objectStore managedObjectCache]) {
|
||||
if ([self.URL isKindOfClass:[RKURL class]]) {
|
||||
RKURL* rkURL = (RKURL*)self.URL;
|
||||
NSArray* fetchRequests = [[self.managedObjectStore managedObjectCache] fetchRequestsForResourcePath:rkURL.resourcePath];
|
||||
NSArray* fetchRequests = [[objectStore managedObjectCache] fetchRequestsForResourcePath:rkURL.resourcePath];
|
||||
NSArray* cachedObjects = [RKManagedObject objectsWithFetchRequests:fetchRequests];
|
||||
for (id object in cachedObjects) {
|
||||
if ([object isKindOfClass:[RKManagedObject class]]) {
|
||||
@@ -192,7 +192,7 @@
|
||||
|
||||
// Before looking up NSManagedObjectIDs, need to save to ensure we do not have
|
||||
// temporary IDs for new objects prior to handing the objectIDs across threads
|
||||
NSError* error = [self.managedObjectStore save];
|
||||
NSError* error = [objectStore save];
|
||||
if (nil != error) {
|
||||
NSDictionary* infoDictionary = [[NSDictionary dictionaryWithObjectsAndKeys:response, @"response", error, @"error", nil] retain];
|
||||
[self performSelectorOnMainThread:@selector(informDelegateOfObjectLoadErrorWithInfoDictionary:) withObject:infoDictionary waitUntilDone:NO];
|
||||
|
||||
@@ -107,8 +107,11 @@ static RKObjectManager* globalManager = nil;
|
||||
}
|
||||
|
||||
// Grab request through client to get HTTP AUTH & Headers
|
||||
RKRequest* request = [self.client requestWithResourcePath:resourcePath delegate:nil callback:nil];
|
||||
return [RKObjectLoader loaderWithMapper:self.mapper request:request delegate:delegate];
|
||||
RKRequest* request = [self.client requestWithResourcePath:resourcePath delegate:nil callback:nil];
|
||||
RKObjectLoader* loader = [RKObjectLoader loaderWithMapper:self.mapper request:request delegate:delegate];
|
||||
loader.managedObjectStore = self.objectStore;
|
||||
|
||||
return loader;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
- (NSDictionary*)objectFromString:(NSString*)string {
|
||||
SBJsonParser* parser = [[SBJsonParser alloc] init];
|
||||
id result = [parser objectWithString:string];
|
||||
[parser release];
|
||||
if (nil == result) {
|
||||
// TODO: Need to surface these errors in a better fashion
|
||||
NSLog(@"[RestKit] RKMappingFormatJSONParser: Parser failed with error trace: %@ and string: %@", [parser errorTrace], string);
|
||||
}
|
||||
[parser release];
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -24,29 +24,55 @@
|
||||
_resourcePath = [resourcePath retain];
|
||||
_delegate = [delegate retain];
|
||||
}
|
||||
|
||||
[self loadFromObjectCache];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: These initializers have to set the ivars so the state is configured before loadFromObjectCache is triggered.
|
||||
* Do NOT DRY these up by adding dependencies or loadFromObjectCache will fire too early.
|
||||
*
|
||||
* WARNING
|
||||
*/
|
||||
|
||||
- (id)initWithResourcePath:(NSString*)resourcePath params:(NSDictionary*)params delegate:(id)delegate {
|
||||
if (self = [self initWithResourcePath:resourcePath delegate:delegate]) {
|
||||
if (self = [self init]) {
|
||||
_resourcePath = [resourcePath retain];
|
||||
_delegate = [delegate retain];
|
||||
_params = [params retain];
|
||||
}
|
||||
}
|
||||
|
||||
[self loadFromObjectCache];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id)initWithResourcePath:(NSString*)resourcePath params:(NSDictionary*)params objectClass:(Class)klass delegate:(id)delegate {
|
||||
if (self = [self initWithResourcePath:resourcePath params:params delegate:delegate]) {
|
||||
if (self = [self init]) {
|
||||
_resourcePath = [resourcePath retain];
|
||||
_delegate = [delegate retain];
|
||||
_params = [params retain];
|
||||
_objectClass = [klass retain];
|
||||
}
|
||||
|
||||
[self loadFromObjectCache];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id)initWithResourcePath:(NSString*)resourcePath params:(NSDictionary*)params objectClass:(Class)klass keyPath:(NSString*)keyPath delegate:(id)delegate {
|
||||
if (self = [self initWithResourcePath:resourcePath params:params objectClass:klass delegate:delegate]) {
|
||||
if (self = [self init]) {
|
||||
_resourcePath = [resourcePath retain];
|
||||
_delegate = [delegate retain];
|
||||
_params = [params retain];
|
||||
_objectClass = [klass retain];
|
||||
_keyPath = [keyPath retain];
|
||||
}
|
||||
|
||||
[self loadFromObjectCache];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -120,28 +146,30 @@
|
||||
|
||||
- (void)loadFromObjectCache {
|
||||
RKManagedObjectStore* store = [RKObjectManager globalManager].objectStore;
|
||||
NSArray* cachedObjects = nil;
|
||||
|
||||
if (store.managedObjectCache) {
|
||||
cachedObjects = [RKManagedObject objectsWithFetchRequests:[store.managedObjectCache fetchRequestsForResourcePath:self.resourcePath]];
|
||||
|
||||
if (cachedObjects && [cachedObjects count] > 0) {
|
||||
if ([_delegate respondsToSelector:@selector(rkModelDidStartLoad)]) {
|
||||
[_delegate rkModelDidStartLoad];
|
||||
}
|
||||
|
||||
_objects = [cachedObjects retain];
|
||||
_loaded = YES;
|
||||
|
||||
if ([_delegate respondsToSelector:@selector(rkModelDidLoad)]) {
|
||||
[_delegate rkModelDidLoad];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (cachedObjects == nil || [cachedObjects count] == 0 || [self needsRefresh]) {
|
||||
[self load];
|
||||
}
|
||||
NSArray* cachedObjects = nil;
|
||||
|
||||
if (store.managedObjectCache) {
|
||||
cachedObjects = [RKManagedObject objectsWithFetchRequests:[store.managedObjectCache fetchRequestsForResourcePath:self.resourcePath]];
|
||||
|
||||
if (cachedObjects && [cachedObjects count] > 0) {
|
||||
if ([_delegate respondsToSelector:@selector(rkModelDidStartLoad)]) {
|
||||
[_delegate rkModelDidStartLoad];
|
||||
}
|
||||
|
||||
_objects = [cachedObjects retain];
|
||||
_loaded = YES;
|
||||
|
||||
if ([_delegate respondsToSelector:@selector(rkModelDidLoad)]) {
|
||||
[_delegate rkModelDidLoad];
|
||||
}
|
||||
} else {
|
||||
[self load];
|
||||
}
|
||||
}
|
||||
|
||||
if ([self needsRefresh]) {
|
||||
[self load];
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)errorWarrantsOptionToGoOffline:(NSError*)error {
|
||||
|
||||
Reference in New Issue
Block a user