utiliser un objet NSURLConnection dans un NSDictionnary

yodarkyodark Membre
22:18 modifié dans API UIKit #1
Bonjour, Je voulais savoir comment faire pour que lorsque que l'on fait des
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];


Pouvoir savoir lorsque l'on reçoit la réponse savoir qui à  envoyé la requête

J'ai pensé à  utiliser
<br />NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];<br />receivedData=[[NSMutableData data] retain];<br />		<br />[connnectionsDictionary setObject:receivedData forKey:theConnection];


Ainsi quand je reçois la réponse du serveur pour récupérer le bon dataset j'ai plus qu'a l'extraire du dictionnaire en fonction de l'objet connexion.

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data<br /><br />{<br />mydata = [connnectionsDictionary objectForKey:connection] ;


Le problème est que j'obtiens un réponse
-[NSURLConnection copyWithZone:]: unrecognized selector sent to instance 0x52f4b0


COmment faire pour stocker les data dans des variable différentes en fonction de la rêquete?

Réponses

  • Philippe49Philippe49 Membre
    22:18 modifié #2
    dans 1241358468:

    <br />NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];<br />receivedData=[[NSMutableData data] retain];		<br />[connnectionsDictionary setObject:receivedData forKey:theConnection];
    


    La clé d'un dictionnaire doit être une NSString

    [connnectionsDictionary setObject:receivedData forKey:@data];
  • yodarkyodark Membre
    22:18 modifié #3
    ah oui c'est vrai...

    Il existe un type de collection qui permette de passer un objet en clé?
    Sinon quel est le moyen le plus propre pour associer un résultat a une connexion donnée ?
  • Philippe49Philippe49 Membre
    22:18 modifié #4
    dans 1241360579:

    Il existe un type de collection qui permette de passer un objet en clé?

    Non

    dans 1241360579:

    Sinon quel est le moyen le plus propre pour associer un résultat a une connexion donnée ?

    Ce que tu fais. Tu peux choisir comme clé l'URL en tant que NSString qui t'a servie à  construire la requête URLRequest
  • yodarkyodark Membre
    22:18 modifié #5
    Okay ce qui est important c'est pas l'url mais les paramétrés qui ont été postés

    httpBodyString=[[NSMutableString alloc] initWithFormat:@&quot;pseudo=%@&amp;mdp=%@&amp;api=1&amp;UDID=%@&quot;, @&quot;&quot;, @&quot;&quot;, mDevice.uniqueIdentifier];<br />[urlRequest setHTTPMethod:@&quot;POST&quot;];<br />	[urlRequest setHTTPBody:[httpBodyString dataUsingEncoding:NSISOLatin1StringEncoding]];
    


    Comment puis-je faire pour récupérer le bodyString (et l'url) au moment ou je reçois la réponse ?

  • Philippe49Philippe49 Membre
    22:18 modifié #6
    Tu peux pas décider de cela à  l'envoi, et non à  la réception ?
  • yodarkyodark Membre
    22:18 modifié #7
    Disons que je n'arrive pas à  savoir à  l'arrivée du résultat qui a envoyé la requête

    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data<br /><br />{<br />mydata = [connnectionsDictionary objectForKey:connection] ;<br />//comment savoir de quel appelle provient cette réponse ?
    


    Ce pour cela que j'avais imaginé ces dictionnaires pour pouvoir associer une réponse à  une requete
  • Philippe49Philippe49 Membre
    22:18 modifié #8
    dans 1241363075:

    Disons que je n'arrive pas à  savoir à  l'arrivée du résultat qui a envoyé la requête


    Tu as exploré
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    si j'ai bonne mémoire une URLResponse donne un suggestedFileName
  • Philippe49Philippe49 Membre
    22:18 modifié #9
    Tu peux trouver un exemple ici dans la trad que j'avais fait sur la doc NSURL
  • yodarkyodark Membre
    22:18 modifié #10
    j'ai essayé

    suggestedFileName -> Me retourne "monfichier.htm"
    URL -> Retourne "mon fichier.php"

    Je n'arrive pas a récupérer les header envoyés par POST

    De plus je vois pas vraiment comment je peux lier
    <br />- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data<br /><br />- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    


    comment savoir a quel didReceiveData est lié didReceiveResponse

    En gros si je reçois deux didReceiveData comment savoir quel est l'url qui a lancé cette réponse et surtout quels sont les données qui ont été postées?
  • Philippe49Philippe49 Membre
    22:18 modifié #11
    Prenons une autre méthode que les dictionnaires, l'objet NSURLConnection qui est en argument de didReceiveData est celui qui a été créé lors de la requête.

    Tu peux donc par exemple faire une NSArray d'objets URLConnection avant d'envoyer les requêtes
    NSArray * connections=[[NSArray alloc] initWithObjects:connection1,connection2,..,nil]; <br />
    


    puis à  la réception lire la connection en question
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NSUInteger index=[connections indexOfObject:connection]; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // attribuer le data en conséquence<br />}<br />
    

    et ainsi attribuer le data comme tu veux. 
  • Philippe49Philippe49 Membre
    22:18 modifié #12
    Autre solution : tu sous-classes NSURLConnection en mettant un identificateur

    @interface YodarkConnection : NSURLConnection {<br />&nbsp; &nbsp; &nbsp; &nbsp; NSString identifier;<br />}
    


    et en récupérant la connection tu peux lire l'identificateur.
Connectez-vous ou Inscrivez-vous pour répondre.