Charger le chemin d'une image contenu dans un .plist dans une UIImageView

Bonjour,

après plusieurs recherches sur le net, je ne trouve pas exactement la réponse à  ma question. La plupart demande à  stocker directement l'image dans un fichier plist. Ce qui semble pas terrible, je veux donc faire les choses proprement en chargeant le chemin d'une image contenu dans un fichier .plist dans une UIImageView.

En gros le chemin serait une String du style : \pathResources\Image.png.

Ensuite charger ce path pour que la UIImageView la récupère et charge cette image.

Est-ce possible et si oui, comment faire ?


Merci pour votre aide

neospirit

Réponses

  • muqaddarmuqaddar Administrateur
    07:55 modifié #2
    UIImage *image = [UIImage imageWithContentsOfFile: @&quot;/pathResources/Image.png&quot;];<br />UIImageView *imageView = [[[UIImageView alloc] initWithImage:image] autorelease];
    


    A toit de bien gérer le path, car on ne sait pas où est vraiment l'image avec ton explication. ;)

    Regarde du côté de :
    + (UIImage *)imageWithContentsOfFile:(NSString *)path
    
  • neospiritneospirit Membre
    07:55 modifié #3
    Ok merci.

    Pour l'image, je pensais la mettre dans le dossier Resources se trouvant dans l'arborescence de Xcode. Est-ce le bon endroit pour que l'image se retrouve compilée avec le reste des fichiers une fois l'application distribuée ?


    Car pour l'instant c'est un juste un chemin par défaut pour tester et debugger l'appli.

    Je teste ça et je reviens.

    Merci

    neospirit
  • AliGatorAliGator Membre, Modérateur
    07:55 modifié #4
    Oui c'est le bon endroit.
    Et dans ce cas, regarde aussi [[NSBundle mainBundle] pathForResource:... ofType:...] qui va te permettre de récupérer ce chemin.

    Et sinon consulte les Programming Guides sur la gestion des ressources dans ton appli ("Resources Programming Guide" un truc comme ça), y'a toujours de la doc à  lire
  • neospiritneospirit Membre
    07:55 modifié #5
    Bonsoir et JOYEUX NOEL à  tous !

    J'avais passé ce problème pour me consacrer à  la gestion de mes vues et navigation controller. Ce qui est fait maintenant.

    Je reviens maintenant sur le chargement du chemin d'une image à  partir d'un .plist. Sachant que l'image se trouve dans le dossier "Resources" du projet, il n'y a théoriquement pas besoin de dire à  XCode où se trouve ladite image.

    Par contre je n'arrive toujours pas à  passer ce chemin de la liste à  la vue de détails.

    Chargement des éléments du fichier .PLIST vers des variables transitoires ===> Liste.m
    <br />&nbsp; &nbsp; self.userName = [dictionnary objectForKey:@&quot;name&quot;];<br />&nbsp; &nbsp; self.userId = [dictionnary objectForKey:@&quot;id&quot;];<br />&nbsp; &nbsp; self.userPhoto = [dictionnary objectForKey:@&quot;photo&quot;];<br />
    


    Et là  je charge les infos dans le DetailView.m
    <br />&nbsp; &nbsp; nameUser.text = liste.userName; //valeur du plist vers un UILabel<br />&nbsp; &nbsp; idUser.text = liste.userId; //idem<br />&nbsp; &nbsp; photoUser.image = liste.userPhoto; //nom de l&#39;image du plist vers une UIImageView<br />
    


    J'attache mon objet UIImageView dans le .XIB à  photoUser.

    Sauf que au final, ça ne marche pas (je dirai comme d'habitude en fait  :'( )


    Merci pour le cadeau de Noël que vous allez me faire en me donnant la réponse  :D

    neospirit
  • 07:55 modifié #6
    Tu passes un NSString (nom de l'image) à  .image de UIImageView, qui lui demande une UIImage...
    <br />UIImage* photoUserImg = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[dictionary objectForKey:@&quot;photo&quot;] ofType:nil]];<br />[photoUser setImage:photoUserImg];<br />[photoUserImg release];<br />
    
  • neospiritneospirit Membre
    07:55 modifié #7
    ah ok...

    mais ça marche toujours pas, je comprends pas.

    Il n'y a rien à  mettre dans le DetailView.M ?


    neospirit
  • neospiritneospirit Membre
    07:55 modifié #9
    La doc Apple ne m'a vraiment pas aidé, mais j'ai néanmoins persévéré à  manipuler les instructions dans tous les sens et j'ai eu l'illumination (de Noël) cette nuit.

    Dans la liste :
    <br />&nbsp; &nbsp; self.userPhoto = [dictionnary objectForKey:@&quot;photo&quot;]; //sachant que userPhoto est un NSString car il contient le chemin et le nom de l&#39;image<br />
    


    Et dans la vue de détail :
    <br />	photoUser.image = [UIImage imageNamed:liste.userPhoto];	//sachant que photoUser est un UIImageView car il affichera une image<br />
    


    Cela pourra servir à  beaucoup je pense

    neospirit
  • 07:55 modifié #10
    Par contre, on en a parlé maintes et maintes fois, évite l'utilisation de +imageNamed:


    This method looks in the system caches for an image object with the specified name and returns that object if it exists. If a matching image object is not already in the cache, this method loads the image data from the specified file, caches it, and then returns the resulting object.


    ça parle de cache. En gros, une fois chargée, l'image reste en mémoire jusqu'à  ce que l'application soit quittée (ou je suppose que ça doit aussi marcher en cas de mem warning).

    Donc il faut de préférence utiliser -initWithContentsOfFile.
  • neospiritneospirit Membre
    07:55 modifié #11
    Effectivement, du coup cela serait plus approprié :
    <br />	photoUser.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:liste.userPhoto ofType:@&quot;png&quot;]];<br />
    


    Merci pour l'amélioration

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