new blog post, albert rest kit
This commit is contained in:
parent
71416216f9
commit
3018bc637c
@ -0,0 +1,101 @@
|
|||||||
|
---
|
||||||
|
layout: post
|
||||||
|
title: "Global response management with RestKit"
|
||||||
|
date: 2013-09-03 13:15
|
||||||
|
comments: true
|
||||||
|
categories: ios restkit
|
||||||
|
description: "RESTKIT how to handle request failures global"
|
||||||
|
---
|
||||||
|
|
||||||
|
For our latest iOS app we are using [RestKit Framework](http://restkit.org), which is a really great and advanced library to communicate to your REST API.
|
||||||
|
|
||||||
|
When you have lots of requests in different areas of your project, you may want to have a global handling for failure events.
|
||||||
|
For example how an Login View, if any of the requests gives you an 401 (Unauthorized) status code.
|
||||||
|
|
||||||
|
In RestKit 0.20 they introduced the oppertunity to register your own `RKObjectRequestOperation`, which is the common way to do this.
|
||||||
|
|
||||||
|
So at first you create a subclass of `RKObjectRequestOperation`, let's call it `CustomRKObjectRequestOperation`
|
||||||
|
|
||||||
|
```objective-c
|
||||||
|
|
||||||
|
#import "RKObjectRequestOperation.h"
|
||||||
|
|
||||||
|
@interface CustomRKObjectRequestOperation : RKObjectRequestOperation
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation CustomRKObjectRequestOperation
|
||||||
|
|
||||||
|
- (void)setCompletionBlockWithSuccess:(void ( ^ ) ( RKObjectRequestOperation *operation , RKMappingResult *mappingResult ))success failure:(void ( ^ ) ( RKObjectRequestOperation *operation , NSError *error ))failure
|
||||||
|
{
|
||||||
|
[super setCompletionBlockWithSuccess:^void(RKObjectRequestOperation *operation , RKMappingResult *mappingResult) {
|
||||||
|
if (success) {
|
||||||
|
success(operation, mappingResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
}failure:^void(RKObjectRequestOperation *operation , NSError *error) {
|
||||||
|
|
||||||
|
[[NSNotificationCenter defaultCenter] postNotificationName:@"connectionFailure" object:operation];
|
||||||
|
|
||||||
|
if (failure) {
|
||||||
|
failure(operation, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
```
|
||||||
|
This is the point where we overwrite the method which sets the completion and failure block.
|
||||||
|
I use the Observer Pattern (`NSNotificationCenter`) to notify about connectionFailures. ([Learn more about NSNotificationCenter](http://mobile.tutsplus.com/tutorials/iphone/ios-sdk_nsnotificationcenter/))
|
||||||
|
|
||||||
|
Of course we need to tell RestKit to use our custom `RKObjectRequestOperation` class. You can do this by adding this line to you RestKit configuration:
|
||||||
|
```objective-c
|
||||||
|
[[RKObjectManager sharedManager] registerRequestOperationClass:[CustomRKObjectRequestOperation class]];
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Now we need a class where we listen to the failure notifications. You can choose any of your class, I use the AppDelegate for this.
|
||||||
|
```objective-c
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(connectionFailedWithOperation:) name:@"connectionFailure" object:nil];
|
||||||
|
```
|
||||||
|
|
||||||
|
As you should know, the `connectionFailedWithOperation:` is called when a connection failure occures.
|
||||||
|
```objective-c
|
||||||
|
- (void)connectionFailedWithOperation:(NSNotification *)notification
|
||||||
|
{
|
||||||
|
RKObjectRequestOperation *operation = (RKObjectRequestOperation *)notification.object;
|
||||||
|
if (operation) {
|
||||||
|
|
||||||
|
NSInteger statusCode = operation.HTTPRequestOperation.response.statusCode;
|
||||||
|
|
||||||
|
switch (statusCode) {
|
||||||
|
case 0: // No internet connection
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 401: // not authenticated
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Links:
|
||||||
|
[RestKit Framework](http://restkit.org)
|
||||||
|
[Class Documentation for RKObjectRequestOperation](http://restkit.org/api/latest/Classes/RKObjectRequestOperation.html)
|
||||||
|
|
||||||
|
_by Albert Schulz_
|
||||||
|
If you have any questions feel free to contact me:
|
||||||
|
eMail: mail@halfco.de
|
||||||
|
Twitter: [@albert_sn](https://twitter.com/albert_sn)
|
||||||
|
Web: [halfco.de](http://halfco.de)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user