Question

J'ai un objectMapping pour mon entité utilisateur

RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:[User class]];
[userMapping mapKeyPath:@"first_name" toAttribute:@"firstName"];
[userMapping mapKeyPath:@"last_name" toAttribute:@"lastName"];
[manager.mappingProvider setMapping:userMapping forKeyPath:@"users"];
[manager.mappingProvider setSerializationMapping:[userMapping inverseMapping] forClass:[User class]];

Et je veux sauver son profil lorsque l'application se fond:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[RKObjectManager sharedManager] putObject:currentUser delegate:self];
}

Mais il ne me laisse pas courir la demande en fermer l'application (je devine sont autorisés pas nouveaux threads). Donc, je voudrais le faire de manière synchrone.

Cependant, je ne l'ai pas réussi à le faire avec RestKit. Y at-il un malentendu de mon côté? Je voudrais avoir:

[[RKObjectManager sharedManager] putObjectSynchronously:currentUser];
Était-ce utile?

La solution

Si vous avez besoin d'envoyer de façon synchrone, tu ne vas pas être en mesure d'utiliser les méthodes pratiques sur RKObjectManager, comme PutObject, parce que ces méthodes pratiques envoyer toute la demande de manière asynchrone en votre nom. , Vous pouvez essayer plutôt quelque chose comme ce qui suit:

RKObjectLoader* loader = [[RKObjectManager sharedManager] objectLoaderForObject:currentUser method:RKRequestMethodPUT delegate:nil];
RKResponse* response = [loader sendSynchronously];

Autres conseils

peut être fait en utilisant RestKit et les méthodes pratiques sur RKObjectManager. Les astuces est de blocs d'utilisation .

Dans votre cas, vous faites votre demande à l'aide du bloc, définissez les onDidFail normale, onDidLoadObjects, onDidLoadResponse, etc. méthodes sur « loader » plutôt que comme méthodes de délégués dans la classe, puis fermez l'application dans le bloc. Par exemple, le code dans la méthode de loader.onDidLoadObjects ne sera pas exécutée jusqu'à ce que la PutObject est terminée, de sorte que est probablement où vous voulez fermer l'écran ou une application. Cela permettrait d'assurer les finalise PutObject avant de passer.

Voir plus dans ma réponse - Faire un appel HTTP synchrone avec RestKit .

Qu'en est:

RKRequest *request = [client post:@"/service" params:params delegate:restDelegate];

RKResponse *response = [request sendSynchronously];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top