web-dev-qa-db-fra.com

accéder à un fichier en utilisant [NSBundle mainBundle] pathForResource: ofType: inDirectory:

J'ai un fichier paylines.txt ajouté dans le dossier nommé TextFiles qui réside dans le dossier Resources de mon projet iOS dans Xcode.

C'est le code que j'utilise pour accéder au fichier:

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"paylines" ofType:@"txt" inDirectory:@"TextFiles"];
NSLog(@"\n\nthe string %@",filePath);

Le code imprime:

2011-06-07 14:47:16.251 slots2[708:207] 

the string  (null)
41
Yadnesh

eh bien, j’ai découvert l’erreur que j’ai commise: j’ajoutais un groupe au projet au lieu d’ajouter un répertoire réel pour plus instructions

10
Yadnesh

J'avais aussi le même problème… .. La solution que j'ai trouvée est (dans xcode 4.x):

Allez à: Cible -> "Phases de construction" -> "Copier les ressources du paquet" Ajoutez ensuite ce fichier ici. Si ce fichier est déjà ajouté, supprimez-le et ajoutez-le à nouveau.

nettoie le projet et exécute. Ça marche. :)

163
Neelam Verma

Essayez ceci, ça marche pour moi. 

NSString *str=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"paylines.txt"];  

Pour simulateur

NSURL *rtfUrl = [[NSBundle mainBundle] URLForResource:@"paylines" withExtension:@".txt"];
10
Rajneesh071

Lorsque je fais glisser des fichiers, la case "Ajouter aux cibles" ne semble pas être cochée par défaut. Si je le laisse non coché, le problème est décrit. Corrigez-le en supprimant les fichiers, puis en les faisant glisser, mais en veillant à cocher "Ajouter aux cibles" .enter image description here

10
dawid

Il vous suffit de vous assurer que la case à cocher ci-dessous est cochée.

 enter image description here

3
RawMean

Essayez-vous de le faire dans un XCTest et sur le point de casser votre ordinateur portable? Ceci est le fil qui vous convient: Pourquoi le code dans les tests unitaires ne trouve-t-il pas les ressources d'ensemble?

3
evanflash

Dans le cas de Mac OSX,

Allez à Cibles -> Phases de construction Cliquez sur + pour copier les nouvelles phases de construction des fichiers Sélectionnez le répertoire du produit et déposez-y le fichier.

Nettoyez et exécutez le projet.

1
megha

Après avoir suivi la réponse de @Neelam Verma ou celle de @ dawid, qui a le même résultat final que la réponse de @Neelam Verma, la différence est que la réponse de @ dawid commence par le glisser-déposer du fichier dans le projet Xcode et la réponse de @Neelam Verma par un Si je fais déjà partie du projet Xcode, je n’ai toujours pas pu obtenir NSBundle.mainBundle().pathForResource("file-title", ofType:"type") pour trouver mon fichier vidéo.

Je pensais que c'était peut-être la cause de mon fichier dans un groupe imbriqué dans le projet Xcode. J'ai donc déplacé le fichier vidéo à la racine de mon projet Xcode, toujours pas de chance, c'était mon code:

 guard let path = NSBundle.mainBundle().pathForResource("testVid1", ofType:"mp4") else {
        print("Invalid video path")
        return
    }

À l’origine, c’était le nom de mon fichier: testVid1.MP4, le fait de renommer le fichier vidéo en testVid1.mp4 a corrigé le problème. Ainsi, au moins l’argument de chaîne ofType est sensible à la casse. 

1
Brian Ogden

Allez dans "Cible" -> "Créer des phases", sélectionnez votre cible, sélectionnez l'onglet "Créer des phases", cliquez sur "Ajouter une phase de construction", puis sélectionnez "Ajouter un fichier de copie". Changez la destination en «Répertoire de produits». Faites glisser votre fichier dans la section «Ajouter des fichiers».

1
Hordaric

Sélectionnez Projet/Dossier spécifique -> Clic droit -> Ajouter des fichiers au projet -> Sélectionnez le fichier que vous souhaitez ajouter.

Cela a fonctionné pour moi.

0
YSR fan