3 votes

Obtenir un chemin nul à partir de NSBundle

J'ai créé un nouveau dossier dans mon projet dans lequel j'ai copié une image (appelée "io.jpg").
J'ai également vérifié dans les phases de construction -> copier les ressources du bundle et le fichier est là.
J'essaie donc d'obtenir le chemin de cette image :

NSBundle* bundle=[NSBundle mainBundle];
NSString* path=[bundle pathForResource: @"io" ofType: @"jpg"];
NSLog(@"%@",path);

Mais il imprime (null), j'ai également essayé de cette façon :

NSBundle* bundle=[NSBundle mainBundle];
NSString* path=[bundle pathForImageResource: @"io"];
NSLog(@"%@",path);

Mais il imprime toujours (null).
Quel est le problème ?

6voto

seenu Points 147

Aller à : Cible -> "Phases de construction" -> "copier les ressources du bundle" Puis ajoutez ce fichier particulier ici.

nettoyer le projet et RUN. Ça marche :)

3voto

Steven Fisher Points 22249

Vous obtiendrez un chemin nul si la ressource que vous demandez n'existe pas dans la sortie (ou n'existe pas là où elle devrait). C'est vraiment la seule raison que j'ai vue.

Oubliez de prouver qu'il devrait exister, et vérifiez simplement la sortie pour être sûr qu'il existe.

(Rappelez-vous également que les noms de fichiers sont sensibles à la casse).

Pour clarifier, vous devez chercher dans le faisceau de sortie en ~/Library/Developer/Xcode/DerviedData/Project-{GUID}/Build/Products . Votre image sera manquante.

3voto

Jessedc Points 4963

Ma supposition, étant donné que vous avez dit que vous avez créé une nouvelle dossier dans votre projet Xcode est que vous avez créé une référence au dossier bleu et que votre ressource image se trouve dans un sous-répertoire de votre bundle.

Je serais prêt à parier qu'il ne s'agit pas d'un bogue avec NSBundle, étant donné l'ancienneté et l'importance de cette classe pour le framework Foundation.

Essayez d'accéder à votre ressource en utilisant la méthode d'instance plus spécifique

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension inDirectory:(NSString *)subpath

donde subpath est le nom de la référence du dossier Je suppose que vous avez créé.

0voto

Yep_It's_Me Points 186

J'ai eu un problème de ce genre il y a quelques semaines. Et il s'est avéré que je n'avais tout simplement pas coché une case. Voici la réponse que j'ai obtenue lorsque j'ai posé la question.

"Sélectionnez le fichier sur dans le Navigateur de projet Xcode (à gauche) et assurez-vous que votre cible est cochée sous "Adhésion à la cible" dans l'Inspecteur de fichier (à droite). -- Vérifiez également l'orthographe des noms de fichiers - Mundi"

0voto

alex gray Points 5089

Tout ceci est C'est un peu exagéré si vous essayez juste d'obtenir une image. Disons que vous avez inclus bundleImage.PNG dans votre paquet d'application quelque part, d'une manière ou d'une autre

NSImage *image = [NSImage imageNamed:@"bundleImage"];

le trouvera, c'est sûr S'il est là On ne peut pas faire plus simple, non ?

Si au cas où - c'est une situation un peu plus compliquée, comme l'image est dans un bundle ou un framework chargeable - vous pouvez utiliser un code similaire à ce qui suit (une catégorie de classe sur NSImage) qui retournera également la ressource.

+ (id) imageInFrameworkWithFileName:(NSString *) fileName {
   NSBundle *b = [NSBundle bundleForClass: [DummyClass class]];
   return [self imageWithFileName: fileName inBundle: b];
}

Pour être honnête, je ne comprends pas vraiment le concept ou le fonctionnement d'une telle "classe factice" mais voici à quoi elle ressemble

@interface DummyClass : NSObject
@end
@implementation DummyClass 
@end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X