mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-01-12 22:51:50 +08:00
* [OTRestModel allObjectsOrderedBy:]
* buildModelFromXML: guards against nils * added error property to OTRestResponse, will get set on connectionDidFail:withError: * also added errorDescription which either uses the error description or the first <error> element in the document
This commit is contained in:
@@ -73,7 +73,7 @@ static OTRestClient* sharedClient = nil;
|
||||
- (OTRestRequest*)get:(NSString*)resourcePath delegate:(id)delegate callback:(SEL)callback {
|
||||
OTRestRequest* request = [[OTRestRequest alloc] initWithURL:[self URLForResourcePath:resourcePath] delegate:delegate callback:callback];
|
||||
request.additionalHTTPHeaders = _HTTPHeaders;
|
||||
[request get];
|
||||
[request get];
|
||||
return request;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,10 +17,6 @@
|
||||
#define context [[[NSApplication sharedApplication] delegate] managedObjectContext]
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#define kResponseUserInfoKey @"ResponseUserInfoKey"
|
||||
|
||||
#define kRailsToXMLDateFormatterString @"yyyy-MM-dd'T'HH:mm:ss'Z'" // 2009-08-08T17:23:59Z
|
||||
|
||||
@interface OTRestModel : NSManagedObject {
|
||||
@@ -37,6 +33,7 @@
|
||||
|
||||
// finders
|
||||
+ (NSArray*)allObjects;
|
||||
+ (NSArray*)allObjectsOrderedBy:(NSString*)key;
|
||||
+ (id)objectWithRestId:(NSNumber*)restId;
|
||||
+ (NSArray*)collectionWithRequest:(NSFetchRequest*)request;
|
||||
+ (NSFetchRequest*)request;
|
||||
|
||||
@@ -84,6 +84,19 @@
|
||||
return [self collectionWithRequest:[self request]];
|
||||
}
|
||||
|
||||
+ (NSArray*)allObjectsOrderedBy:(NSString*)key {
|
||||
NSFetchRequest* request = [self request];
|
||||
|
||||
NSSortDescriptor* sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:key
|
||||
ascending:YES
|
||||
selector:@selector(caseInsensitiveCompare:)]
|
||||
autorelease];
|
||||
NSArray* sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
|
||||
[request setSortDescriptors:sortDescriptors];
|
||||
|
||||
return [self collectionWithRequest:request];
|
||||
}
|
||||
|
||||
+ (id)createOrUpdateAttributesFromXML:(Element*)XML {
|
||||
NSNumber* objectId = [XML contentsNumberOfChildElement:@"id"];
|
||||
id object = [self objectWithRestId:objectId];
|
||||
|
||||
@@ -29,6 +29,9 @@
|
||||
}
|
||||
|
||||
- (id)buildModelFromXML:(Element*)XML {
|
||||
if (XML == nil) {
|
||||
return nil;
|
||||
}
|
||||
NSString* elementName = [XML key];
|
||||
Class class = [_elementToClassMappings objectForKey:elementName];
|
||||
if (class == nil) {
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
OTRestRequest* _request;
|
||||
NSHTTPURLResponse* _httpURLResponse;
|
||||
NSMutableData* _payload;
|
||||
NSError* _error;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -46,6 +47,12 @@
|
||||
*/
|
||||
@property(nonatomic, readonly) NSData* payload;
|
||||
|
||||
/**
|
||||
* The error returned if the url connection fails
|
||||
*/
|
||||
@property(nonatomic, readonly) NSError* error;
|
||||
|
||||
|
||||
/**
|
||||
* Initialize a new response object for a REST request
|
||||
*/
|
||||
@@ -66,4 +73,11 @@
|
||||
*/
|
||||
- (DocumentRoot*)payloadXMLDocument;
|
||||
|
||||
/**
|
||||
* Will determine if there is an error object and use it's localized message
|
||||
* or
|
||||
* take the first <error> element out of the returned document.
|
||||
*/
|
||||
- (NSString*)errorDescription;
|
||||
|
||||
@end
|
||||
|
||||
@@ -10,11 +10,12 @@
|
||||
|
||||
@implementation OTRestResponse
|
||||
|
||||
@synthesize payload = _payload, request = _request;
|
||||
@synthesize payload = _payload, request = _request, error = _error;
|
||||
|
||||
- (id)init {
|
||||
if (self = [super init]) {
|
||||
_payload = [[NSMutableData alloc] init];
|
||||
_error = nil;
|
||||
}
|
||||
|
||||
return self;
|
||||
@@ -31,6 +32,7 @@
|
||||
[_httpURLResponse release];
|
||||
[_payload release];
|
||||
[_request release];
|
||||
[_error release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
@@ -47,6 +49,11 @@
|
||||
[[_request delegate] performSelector:[_request callback] withObject:self];
|
||||
}
|
||||
|
||||
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
|
||||
_error = [error retain];
|
||||
[[_request delegate] performSelector:[_request callback] withObject:self];
|
||||
}
|
||||
|
||||
- (NSString*)localizedStatusCodeString {
|
||||
return [NSHTTPURLResponse localizedStringForStatusCode:[self statusCode]];
|
||||
}
|
||||
@@ -59,6 +66,16 @@
|
||||
return [DocumentRoot parseXML:[self payloadString]];
|
||||
}
|
||||
|
||||
- (NSString*)errorDescription {
|
||||
NSString* desc;
|
||||
if (_error != nil) {
|
||||
desc = [_error localizedDescription];
|
||||
} else {
|
||||
desc = [[(Element*)[self payloadXMLDocument] selectElement:@"error"] contentsText];
|
||||
}
|
||||
return desc;
|
||||
}
|
||||
|
||||
- (NSURL*)URL {
|
||||
return [_httpURLResponse URL];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user