RestKit & Blocks

Bonjour à  tous,



j'éssaie depuis un bon bou de temps maintenant de récupérer dans un block le contenu d'un array dans un model. cet array contient une ressource retourné par un serveur. Dans le block je récupère bien les données dans mon model. une fois sortie du bloc l'instance de mon model est vide. hors j'ai absolument

besoin de ces données. voici un extrait



[operation setCompletionBlockWithSuccess:^(RKobjectRequestOperation *op, RKMappingResult * resul)

{

self.model = [resul firstObject];

NSLog(@model %@ ", [self.model description]; //ici l'objet est valide



}];



[opertion start];



NSLog(@model %@ ", [self.model description]; //ici l'objet est null

return mode;





Hors j'ai absolument besoin de retourner cet objet valide.

Quelqu'un à  t il une idée?

merci d'avance

Réponses

  • CéroceCéroce Membre, Modérateur
    mars 2013 modifié #2
    Place deux points d'arrêt: un dans le bloc, et un sur [operation start], tu verras que le bloc est exécuté plus tard. Et c'est normal, il sert justement à  manipuler – plus tard – les données renvoyées par le serveur. ça évite de bloquer l'appli...



    Donc la réponse est qu'il faut tout gérer de manière asynchrone: par exemple, on empêche les interactions avec l'IHM pendant le chargement en affichant un UIActivityIndicator. Quand les données sont reçues, on rafraà®chit l'IHM.
  • bobobobo Membre
    Bonjour Céroce



    Merci pour ta réactivité,



    j'avais en effet compris que mon blocks s'éxecute bien après.

    Mais il y a t il pas un moyen d'exécuté mon block en priorité ? avant le NSLog suivant
  • 'bobo' a écrit:


    j'avais en effet compris que mon blocks s'éxecute bien après.

    Mais il y a t il pas un moyen d'exécuté mon block en priorité ? avant le NSLog suivant




    Quel est l'intérêt de lancer une tâche en parallèle si l'on veut qu'elle s'exécute en séquence ?
  • bobobobo Membre
    Bonjour jpimbert



    merci de être arrêter sur mon poste.



    En réalité je suis pas un expert RestKit , donc j'ai juste suivi le tuto sur github. ceci dit si je pouvais me passer des blocks pour le coup, je le ferai bien volontier.
  • bobobobo Membre
    Ce que j'essaie de faire dans cette fonction c'est de retourner mon model avec le resultat du serveur. quelqu'un sait si je peux le faire autrement ? cela m'evitera de renvoyer un objet null a la fin de la fonction
  • On peut attendre qu'une tâche soit terminée.

    Par exemple :
    <br />
    [operation start];<br />
    [operation waitUntilFinished];<br />
    NSLog(@&quot;model %@&quot;,self.model];<br />
    




    Mais brutalement comme ça, je ne te le conseille pas. Il y a un problème de conception si tu as ABSOLUMENT besoin DE SUITE du résultat d'une tâche lancée en parallèle.
  • bobobobo Membre
    Merci à  toi,



    mais celà  ne fonctionne pas . je vais esayé de passer par une requête synchrone sans passer par restkit. c'est la seule solution je pense.





    encore merci à  vous
  • 'bobo' a écrit:


    mais celà  ne fonctionne pas




    Surprenant.
Connectez-vous ou Inscrivez-vous pour répondre.