2016-07-12 26 views
0

ich mit einer Methode eine Klasse namens API Helfer haben, die wie folgt aussieht:RestKit, fehlgeschlagen Intercept Anfrage/wiederholt, wenn er aufgrund Token Verfall verursacht wurde

+(RKObjectManager*) getRestObjectManager{ 
    NSURL *baseURL = [NSURL URLWithString:BASE_URL]; 
    AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL]; 
    // initialize RestKit 
    RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client]; 

    return objectManager; 
} 

Und ich will schaffen Klassen wie API_User, API_Group usw. jede dieser Klassen. hat Methoden wie

+(void)getDetails:(void (^)(User* user))onSuccess{ 

    //fetch object manager from api helper and perform request, on success, call the onSuccess block from the function parameter. 

    onSuccess(user); //if it was successful, i will create a user object and //return. 

} 

Es gibt mehrere Methoden, wie getDetails sein, die jeweils die ein Authentifizierungs-Token erforderlich gesendet werden zu arbeiten. Das Token kann ablaufen und muss aktualisiert werden.

Wie kann ich:

eine Art Abfangjäger in API Helfer definieren, so dass, wenn eine Anforderung fehlschlägt, wird ein neues Token (mein Token abgelaufen Antwort stellt sich ein neues Token) holen, und wiederholen Sie die Anfrage, die gescheitert war? Ich möchte das nicht für jeden von mir definierten Endpunkt behandeln.

Antwort

0

Was war ich habe RKObject-Manager erweitern und behandelt dort Ausfälle wie so:

@implementation MYOWNObjectManager 

#pragma mark - RKObjectManager Overrides 
- (void)getObjectsAtPath:(NSString *)path parameters:(NSDictionary *)parameters success:(void (^)(RKObjectRequestOperation *operation, 
RKMappingResult *mappingResult))success failure:(void (^)(RKObjectRequestOperation *operation, NSError *error))failure { 
    [super getObjectsAtPath:path parameters:parameters success:success failure:^(RKObjectRequestOperation *operation, NSError *error) { 
//check if failure was due to token expiry, if yes call the code to refresh token. otherwise just call failure(operation, error); 

[super getObjectsAtPath:path parameters:parameters success:success failure:failure]; //this line performs the request again. 
    }]; 
} 

Dieser Code-Schnipsel nur für GET ist. Sie müssen auch PUT/POST usw. mit derselben Logik

übersteuern