Comment annuler prématurément une demande RestKit et invoquer « didFailWithError »

StackOverflow https://stackoverflow.com/questions/8347846

  •  27-10-2019
  •  | 
  •  

Question

J'utilise RestKit dans mon projet Objective-C et le besoin de spécifier un délai d'attente pour un appel à mon service d'environ 10 secondes.

Après avoir lu autour, il ne ressemble pas à RestKit soutient cela, donc mon plan est de:

  • Démarrer une minuterie lorsque ma demande est envoyée
  • Lorsque les données sont chargées, le temporisateur de désactivation

Voici mon problème ...

Si les feux de la méthode de la minuterie, je dois annuler la demande et invoquez la méthode ci-dessous manuellement. Je ne suis pas 100% sûr de savoir comment y parvenir.

Il y a un certain contexte dans mon autre question , montrant comment RestKit est mis en œuvre dans mon projet et ce qu'il fait dans ce cas.

Un grand merci à l'avance pour toute aide que vous pouvez me donner sur celui-ci.

- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error { 
     NSLog(@"Hit error: %@", error); 
}
Était-ce utile?

La solution

Vous pouvez utiliser cancelRequestsWithDelegate. Sélecteur pour obtenir le flux de travail décrit

- (void)cancelAfterTimeout {
    [[[[RKObjectManager sharedManager] client] requestQueue] cancelRequestsWithDelegate:self];
    NSError *myError = [[[NSError alloc] initWithDomain:NSPOSIXErrorDomain
            code:12345 userInfo:nil] autorelease];
    //feel free to customize the error code, domain and add userInfo when needed.
    [self handleRestKitError:myError];
}

Cependant, il peut être difficile d'invoquer ce gestionnaire d'erreur délégué, mais vous pouvez contourner le problème en créant de nouveaux, gestionnaire d'erreurs séparée comme ceci:

- (void)handleRestKitError:(NSError*)error {
    //do something with the error
}

et modifier le corps de votre méthode didFailWithError::

- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error { 
     [self handleRestKitError:error] 
}

Autres conseils

Dans la version 0.20.x RestKit vous pouvez annuler les requêtes programmées en utilisant

[[RKObjectManager sharedManager]
    cancelAllObjectRequestOperationsWithMethod:RKRequestMethodAny
                           matchingPathPattern:YOUR_PATTERN];

Vous pouvez toujours terminer avec: [[RKObjectManager sharedManager].operationQueue cancelAllOperations]; Chacune de vos demandes se terminera avec l'erreur -999 (opération annulée). Vous pouvez vérifier la error.code et effectuer des mesures appropriées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top