Problème avec NSView et NSURLConnection

FloFlo Membre
23:45 modifié dans API AppKit #1
Bonjour à  tous,

J'ai un petit problème avec le téléchargement de mes données via NSURLConnection.

J'ai une NSImageView qui est sensée afficher la dernière image téléchargée. En fait la première fois que je lance le téléchargement, l'imageView n'affiche rien, ce n'est qu'à  partir du deuxième téléchargement que les images s'affichent  :crackboom:-

Tenez-vous bien, si j'y vais au debugueur, l'image s'affiche bien dés la première fois, c'est à  n'y rien comprendre...

<br /><br />// lancement de la requête dans le thread principal<br /><br />self.graphConnection = [[NSURLConnection alloc] initWithRequest: graphRequest delegate: self];<br /><br />// delegate<br /><br />- (void) connection: (NSURLConnection *)connection didReceiveData: (NSData *)aData<br />{	<br />	if (connection == graphConnection)<br />	{<br />		NSImage *aGraph = [[NSImage alloc] initWithData: aData];<br />		<br />		[addSheetGraphView setImage: aGraph];<br />		<br />		[aGraph release];<br />	}<br />}<br /><br />


J'ai essayé avec setNeedsDisplay, sans résultats...  pleaze :why?:

Réponses

  • zoczoc Membre
    23:45 modifié #2
    Sans doute parce que NSUrlConnection est susceptible de te retourner ton fichier téléchargé en morceaux, et que quand tu debuggues, tu changes le timing de l'application et que du coup tu récupères toute l'image du premier coup.

    Le message didReceiveData peut être appelé plusieurs fois. A chaque appel, il faut concaténer les nouvelles données reçues avec les données déjà  reçues.

    Ce n'est que dans la méthode connectionDidFinishLoading que tu es certain d'avoir tout reçu et que tu peux lancer l'affichage.

    Pour plus d'infos, voir la Documentation de référence de NSURLConnection
  • FloFlo Membre
    23:45 modifié #3
    Ha ben oui tu as raison  :)

    ça m'apprendra à  ne pas lire entièrement la doc d'une classe que je ne connais pas !  :)beta:

    Merci pour ton aide en tous cas 
Connectez-vous ou Inscrivez-vous pour répondre.