IKImageBrowserView charge toujours les mêmes images!

Guillaume CGuillaume C Membre
23:05 modifié dans API AppKit #1
Bonjour,

J'utilise dans mon application une IKImageBrowserView. Comme ca ne marche pas comme je veux  :'( , j'ai créé une application qui fait uniquement ce qui ne marche pas (projet xcode en fichier joint). Alors voici ce qui coince:

Je souhaite insérer dans la IKImageBrowserView uniquement 2 sortes d'images (la numéro 1 et la numero 2). J'ai un NSTextfield dans lequel je rentre le numéro de l'image (soit 1 ou 2, et si c'est autre chose, ça plante, mais c'est normal). Ensuite je clique sur le bouton: importer l'image. Ca marche bien, je vois mon image dans la view.

MAIS, le problème apparait quand je change le numéro pour une nouvelle importation. C'est toujours la même image qui est importée  :( Exemple: j'importe plusieurs fois l'image 1, ensuite je rentre 2 dans le NSTextfield, et c'est toujours l'image 1 qui est importée....

Le NSTextfield prend bien les valeurs car si je ferme et relance l'application, et importe l'image 2 en premier, c'est toujours l'image 2 qui sera importée. Et j'ai vérifié ceci avec un NSLog, qui lui me retourne la bonne image, alors que c'est toujours la première image importée qui est importée...

Pire, avec un bouton qui efface tout, indépendamment de mon choix dans le NSTextfield, c'est toujours la première image importée qui est importée. Alors que j'ai retiré tous les objets de mon tableau d'image.  :o

Je suis complètement perdu  :'( et je ne vois vraiment pas pourquoi la IKImageBrowserView semble garder en mémoire la première image importée.  :why?:

Je dois faire un truc de faux, mais quoi?

Réponses

  • 23:05 modifié #2
    Je parie 10000000000€ que tu retournes pas l'UID de chaque item  :)
    Pas le temps de regarder ton projet.. mais n'oublie pas d'implémenter ceci dans la classe "BrowserItem" ou je ne sais pas comment tu l'as nommée :

    <br />- (NSString*)imageUID<br />{<br />&nbsp; &nbsp; return [[path retain] autorelease];<br />}<br />
    
    ;

    Moi j'ai fait en fonction du chemin. Comme ça si l'item est dupliqué, il ne met pas X fois les doublons en mémoire cache.
  • Guillaume CGuillaume C Membre
    octobre 2009 modifié #3
    Euh, j'avais mis ça dans mon code:

    <br />- (NSString *) imageUID<br />{<br />	return imageID;<br />}<br />
    


    avec ceci dans l'interface:
    NSString * imageID;
    


    C'est bizarre...
  • 23:05 modifié #4
    Et tu fais bien un "setImageID" ?  ::) non parce si elle change jamais cette ID... forcément ça restera @";" :D
  • 23:05 modifié #5
    c'est un peu malin de toujours mettre la meme chose :
    <br />NSString *imageID = @&quot;Test&quot;;	<br />
    


    Normal qu'il affiche toujours la meme image!
    Je t'ai changé ça en envoyant simplement le chemin de l'image comme imageID.

    Au passage, le peu que j'ai vu y'a l'air d'y avoir pas mal de problème de mémoire.
  • Guillaume CGuillaume C Membre
    23:05 modifié #6
    Je ne comprends pas  :'( Je crois avoir deja fait le setImageID car j'importe mes images avec cette methode.

    PictItem *item = [[PictItem alloc] initWithImage:anImage imageID: anImageID];
    


    Et elle est definie dans la classe PictItem par:

    <br />- (id)initWithImage:(NSImage*)anImage imageID:(NSString*)anImageID<br />{<br />	if (self = [super init]) {<br />		<br />		image = [[NSImage alloc] init];<br />		[self setImage:anImage];<br />		imageID = [[NSString alloc] init];<br />		[self setImageID:anImageID];<br />	}<br />	return self;<br />}<br />
    


    Il y a un truc qui coince quelque part...
  • Philippe49Philippe49 Membre
    23:05 modifié #7
    Merci de supprimer le dossier "build" quand tu postes un projet  ;)
  • Guillaume CGuillaume C Membre
    23:05 modifié #8
    dans 1254422286:

    c'est un peu malin de toujours mettre la meme chose :
    <br />NSString *imageID = @&quot;Test&quot;;	<br />
    


    Normal qu'il affiche toujours la meme image!
    Je t'ai changé ça en envoyant simplement le chemin de l'image comme imageID.

    Au passage, le peu que j'ai vu y'a l'air d'y avoir pas mal de problème de mémoire.


    OK. Merci. Effectivement, je ne suis pas malin (du tout) ... ::)
  • Guillaume CGuillaume C Membre
    23:05 modifié #9
    dans 1254422542:

    Merci de supprimer le dossier "build" quand tu postes un projet  ;)


    Je me suis posé la question, mais quand j'ai vu les fichiers du genre categories.pbxbtree, je me suis dit qu'il ne fallait mieux pas bidouiller la dedans, mais maintenant je sais  :)
  • Guillaume CGuillaume C Membre
    23:05 modifié #10
    dans 1254422286:

    c'est un peu malin de toujours mettre la meme chose :
    <br />NSString *imageID = @&quot;Test&quot;;	<br />
    


    Normal qu'il affiche toujours la meme image!
    Je t'ai changé ça en envoyant simplement le chemin de l'image comme imageID.


    En fait, la raison pour laquelle j'ai mis le même imageID, c'est que les images que j'affiche ne sont pas des vrais fichiers mais juste des NSImage. Ces NSImages représentent des résultats de calculs. Quand je change les paramètres des calculs, je souhaite mettre à  jour les graphes.

    Par exemple, j'ai un graphe pour observer la variable A. J'effectue un calcul en mettant le parametre k = 0, et j'affiche le graphe avec imageID = @A. Ensuite, je refais le calcul avec le parametre k = 1, et je souhaite re-afficher le graphe avec imageID = @A. Entre-temps, j'avais enlevé tous les BrowserItem de mon array, mais apparemment, ce n'est pas suffisant. Quand je re-ajoute un objet avec le même imageID, la IKImageBrowserView ne semble pas prendre l'objet mis à  jour, mais celui qui était affiché auparavant (bizarre, car je l'ai releasé).

    Donc ma question est plutôt de savoir comment rafraichir une IKImageBrowserView quand des images sont mises à  jour par un autre processus (même imageID, mais NSImage différent).  Dans mon cas, je pourrais toujours écrire le imageID de telle sorte qu'il contienne tous les paramètres et leurs valeurs, mais cela va vite être infaisable. Est-ce que cela paraà®t possible autrement?

    Et encore merci!

  • Guillaume CGuillaume C Membre
    23:05 modifié #11
    Je crois que j'ai trouvé  :)

    Il faut implémenter
    - (NSUInteger)imageVersion;

    et incrémenter la valeur de mon instance de IKImageBrowserItem à  chaque nouveau calcul. Et ça semble marcher!
  • 23:05 modifié #12
    Mais tu as regardé ton projet que j'ai modifié? Parce que je l'avais attaché en piece jointe dans mon dernier post  :-\\ Et j'avais donc résolu le problème sans ton imageVersion.
  • Guillaume CGuillaume C Membre
    23:05 modifié #13
    dans 1254475162:

    Mais tu as regardé ton projet que j'ai modifié? Parce que je l'avais attaché en piece jointe dans mon dernier post  :-\\ Et j'avais donc résolu le problème sans ton imageVersion.


    Oui, oui, j'avais regardé et merci bcp pour la correction du projet. Mais quand j'ai mis les corrections dans mon vrai programme, cela ne marchait toujours pas, parce que je devais en fait mettre à  jour des images avec le même UID.
Connectez-vous ou Inscrivez-vous pour répondre.