Question UIImage imageNamed: ne trouve pas d'image dans le dossier Xcode référencé en bleu


Dans mon projet Xcode, j'ai un dossier référencé en bleu qui pointe vers un dossier contenant des images.

L'avantage du dossier bleu est que je n'ai pas besoin d'ajouter les fichiers à Xcode manuellement. Donc, lorsque j'ajoute une nouvelle image dans le dossier, elle apparaît automatiquement dans Xcode lorsque j'essaie de référencer le fichier à partir du code en utilisant

[UIImage imageNamed:@"myFileFromTheBlueFolder"];

il ne trouve pas l'image bien que le dossier de niveau supérieur soit ajouté à la cible. :-(

Dois-je référencer l'image différemment lorsque je viens d'un dossier bleu, ce qui irait à l'encontre de l'objectif d'un tel dossier?


14
2017-07-16 07:35


origine


Réponses:


J'imagine que le problème est que le "dossier bleu" (par exemple, la référence de dossier, au lieu d'un groupe) est copié dans les ressources de votre application telles quelles. En d'autres termes, les ressources ne sont pas aplaties, comme c'est généralement le cas pour les ressources. Si vous vérifiez votre produit, à côté de toutes vos ressources normales, vous verrez probablement le dossier lui-même, et tout ce qui se trouve dans le dossier est toujours dans le dossier.

En tant que tel, +[UIImage imageNamed:] ne peut pas trouver l'image car elle ne se déclenche pas dans les sous-répertoires. Vous pouvez utiliser -[NSBundle pathForResource:ofType:inDirectory:] pour obtenir un chemin vers la ressource et le transmettre à +[UIImage imageWithContentsOfFile:], mais cela élimine les optimisations de mémoire +imageNamed: a (par exemple, où il met en cache les images utilisées et supprime les images inutilisées).

Vous pouvez également arrêter d'utiliser une référence de dossier. Vous pouvez également supprimer la référence de dossier de votre phase de génération de ressources et ajouter une phase de génération de script shell qui copie son contenu dans votre produit construit.


9
2017-07-16 07:44



Kevin a raison sur les optimisations de mémoire +[UIImage imageNamed:] fournit, mais il est absolument possible d'accéder aux images dans les dossiers bleus (références de dossier). Tout ce que vous avez à faire est d'ajouter le nom du dossier dans le nom de l'image. Par exemple:

Vos ressources sont organisées comme ceci:

Icons (blue folder / folder reference)
  |__camera.png
  |__checkmark.png
Shared (yellow folder / xcode group)
  |__back.png
  |__logo.png

Vous pouvez accéder aux images comme ceci:

[UIImage imageNamed:@"Icons/camera"];
[UIImage imageNamed:@"Icons/checkmark"];

[UIImage imageNamed:@"back"];
[UIImage imageNamed:@"logo"];

25
2018-05-30 06:34



Ecrire le nom complet de l'image.

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

Gardez également à l'esprit les noms insensibles à la casse.


-10
2017-07-16 07:45