web-dev-qa-db-fra.com

UIImage imageNamed renvoie nil

Je suis assez nouveau pour iOS et Xcode.

J'ai essayé de charger une image avec 

[UIImage imageNamed:@"imageName.png/jpg and so on"];

mais il ne retourne que néant. L'image doit faire partie de mon ensemble de projets, compte tenu du fait que je peux la choisir dans les menus glisser-déposer du InterfaceBuilder. Elle a été ajoutée à Xcode via le menu "Ajouter des fichiers à" nom du projet "...".

Que j'utilise des images .png ou .jpg, le résultat reste le même: elles fonctionnent via IB, mais pas si j'essaie d'exécuter moi-même la méthode imageNamed.

43
arne somborn

Il n'y a que quelques raisons pour lesquelles une image reviendrait nulle avec imageNamed:

  • L'image n'est pas dans votre paquet. Assurez-vous que l'image est bien dans votre projet. Assurez-vous que la cible est cochée en cliquant sur le fichier et en sélectionnant la cible à laquelle il appartient.

  • Le nom de l'image est mal orthographié ou il y a un problème avec l'extension.

  • Vous utilisez un écran Retina mais vous n’avez pas d’image @ 2x. Essayez de changer votre simulateur en rétine et voyez s'il apparaît. 

  • Si vous utilisez un catalogue d'actifs, assurez-vous que les périphériques appropriés ont été sélectionnés dans l'inspecteur d'attributs.

Quelques conseils:

Si vous testez avec simulateur, supprimez l'application de votre simulateur et nettoyez votre projet, puis réexécutez-le. S'il apparaît toujours, il devrait apparaître sur votre téléphone (dans le cas contraire, il s'agit probablement d'un problème de casse du nom de fichier ou de la version @ 2x).

Si vous testez sur votre téléphone et que celui-ci ne s'affiche pas, assurez-vous que vous utilisez la même version du simulateur (si vous avez un iPhone 4/4s, veillez à utiliser le simulateur 4/4 avec rétine).

Une dernière chose selon ce post: L’image JPG ne se charge pas avec UIImage imageNamed Il existe un problème avec certains types JPG travaillant avec imageNamed et aucune extension. De toute façon, vous devriez utiliser des fichiers PNG car iOS les compresse pour vous, à moins que vous ne deviez utiliser JPG.

82
Matt Hudson

Re commentaire de Mike Weller. La case à cocher est ....

enter image description here

16
Damo

Dans mon cas, la PNG était mal formée.

Pour une raison quelconque, l'aperçu Xcode l'a montré correctement, mais lorsque j'ai essayé de le charger avec UIImage, il n'a pas abouti.

13
Kof

Je viens d'avoir ce problème pour les fichiers jpg nommés sur le disque "file.jpg"

J'essayais de charger sans l'extension, juste @ "fichier". Cela fonctionne bien pour les pngs, mais pas pour les jpg. Une fois que j'ai utilisé @ "file.jpg", cela a fonctionné!

9
clocksmith

Si vous avez vérifié toutes les réponses ci-dessus et que votre UIImage (nommé: "myImage") renvoie nil à partir du code contenu dans le cadre dynamique que vous êtes en train de générer , vous devez le modifier en:

UIImage(named: "myImage", in: Bundle(identifier: "com.myframework.name"), compatibleWith: nil)

Cela devrait permettre de récupérer correctement l’actif de CXAssets.

5
Travis M.

Vérifiez que le fichier n'a pas d'espace à la fin. Le nom comme name @2x.png échouera au chargement, mais [email protected] va 

1
akaDuality

essayer 

[UIImage imageNamed:@"imageName.png"];

à la place (avec une extension)

1
iMx

Essayez de réexporter votre image.

J'ai eu un problème similaire, UIImage imageNamed renvoyait nil et aucune de ces réponses n'a résolu mon problème. 

J'ai découvert que c'était en fait quelque chose qui n'allait pas avec le fichier png. J'ai ouvert le fichier dans l'éditeur d'image GIMP, je l'ai enregistré sous un nouveau fichier, je l'ai exporté à nouveau au format png et, comme par magie, tout a commencé à fonctionner.

Je n'ai absolument rien changé dans le code, il y avait donc un problème avec le fichier image.

1
Kage

Essayez d’utiliser UIImage(contentsOfFile:) au lieu de imageNamed. Cela a fonctionné pour moi avec des images téléchargées.

1
superarts.org

J'ai eu le même problème: @ "photo.jpg" a abouti à 'nil' UIImage . Passer à la "spécification" de fichier, @ "photo.JPG" fonctionne bien! -sensibilité là! TRÈS non intuitif.

1
Jim

j'avais un problème similaire, le nettoyage a finalement résolu le problème: l'image est apparue dans le simulateur, mais l'identifiant ne s'est pas affiché lors de l'exécution de l'application sur l'iPhone.
Ce que j'ai fait: 1) a supprimé l'application de l'iPhone 2) a exécuté Product/Clean Après que le bogue a été corrigé et que l'image soit visible!

1
iHux

Assurez-vous que vous avez l'image du PÉRIPHÉRIQUE que vous utilisez dans votre fichier .xcassets. Une image marquée pour iPad ne s'affichera pas sur le téléphone (ou le téléphone simulé).

0
Venture

Assurez-vous que le champ Nom de l'inspecteur d'attributs de l'image correspond exactement au nom que vous utilisez. Dans mon cas, l'image faisait partie d'un dossier et le nom de l'image était donc "dossier/nom". L'utilisation de ce long nom a résolu le problème. XCode 7.3.1

0
andrewz

Pour Xcode 6.4, cliquez sur Images.xcassets et vérifiez s’il existe des entrées pour chaque image que vous avez appelée. Vous pouvez cliquer avec le bouton droit de la souris sur l'image et sélectionner "Afficher dans le Finder" pour vérifier si les images sont correctement ajoutées. 

0
Das

Dans mon cas, utiliser un nom avec des caractères accentués s'est avéré une mauvaise idée. J'ai changé Astéroïdes en Astéroïdes et cela a bien fonctionné.

0
Huibert

En plus de la réponse de @ Inturbidus: Pour ceux qui sont venus ici pour travailler sur extensions d'application

L'image avec laquelle vous travaillez doit appartenir à both target - à une application hébergée et à une extension.

Dans les autres cas, vous aurez toujours nil en essayant d'y accéder depuis le code de l'extension.

0
slxl

L'image fonctionne-t-elle sur le simulateur mais pas sur l'appareil?

Si tel est le cas, dans ce scénario, il s'agit dealwaysde la casse du nom. L'appareil nécessite un boîtier exact et le simulateur n'est pas si difficile si je me souviens bien.

par exemple. pour une image nommée image.png

[UIImage imageNamed:@"Image"];

fonctionnerait sur le simulateur mais pas sur l'appareil ...

0
Damo