web-dev-qa-db-fra.com

Comment obtenir le chemin du fichier dans l'application iPhone

J'ai un problème d'accès à mes fichiers dans mon application.

J'utilise actuellement

//Directly from TileMap example from WWDC2010
NSString *tileDirectory = [[[NSBundle mainBundle] resourcePath] 
                           stringByAppendingPathComponent:@"Tiles"];

pour accéder à mes vignettes pour mon MKOverlay. Cela me donne ce répertoire

/ Users/xxxx/Library/Application Support/iPhone Simulator/4.2/Applications/9D62025C-C53B-472C-8309-xxxx/xxxx.app/Tiles

Les x sont uniquement pour des raisons de confidentialité

J'ai mes tuiles dans un dossier appelé Tiles à la racine de mon application qui est en Xcode dans un groupe appelé Tiles qui est directement dans le groupe Resources.

Lorsque j'exécute mon application, j'obtiens une simple erreur disant qu'elle n'a pas pu trouver mes vignettes dans le répertoire généré (la citation ci-dessus) Si je remplace ce morceau de code et le fais:

NSString *tileDirectory = @"/Users/xxxx/Documents/xxxx/Tiles";

Ensuite, mon application fonctionne bien. C'est évidemment parce qu'il trouve mes tuiles à son emplacement direct sur mon Mac. C'est bien pour les tests, mais j'en ai besoin pour fonctionner sur mon iPhone/iPad.

Ce problème peut se produire en raison de:

  • Le répertoire généré est incorrect.
  • Les images de tuiles ne sont pas incluses dans le fichier .app Généré.

Quoi qu'il en soit, je n'ai aucune idée de quoi faire pour le résoudre.

Comment puis-je résoudre ce problème?


[MODIFIER]

J'ai changé ce morceau de code en:

NSString *tileDirectory = [[NSBundle mainBundle] resourcePath];

Maintenant, cela fonctionne dans le simulateur, car tous les fichiers sont dans le dossier racine des applications et je ne lui demande pas d'entrer dans un autre répertoire appelé "Tiles".

Cela fonctionne sans erreur sur le simulateur, mais quand sur mon iPhone, il donne l'erreur d'origine (juste un chemin de fichier différent mais se terminant également par /xxxx.app

Comment puis-je garantir un répertoire dans mon fichier d'application tel que xxxx.app/Tiles - TileMap le fait.

37
LouwHopley

N'oubliez pas que les "dossiers/groupes" que vous créez dans xcode, ceux qui sont jaunâtres, ne sont pas reflétés comme de vrais dossiers dans votre application iPhone. Ils sont juste là pour structurer votre projet XCode. Vous pouvez imbriquer autant de groupes jaunes que vous le souhaitez et ils ne servent qu'à organiser le code dans XCode.

MODIFIER

Créez un dossier en dehors de XCode puis faites-le glisser et sélectionnez "Créer des références de dossier pour tous les dossiers ajoutés" au lieu de "Créer des groupes pour tous les dossiers ajoutés" dans la fenêtre contextuelle.

19
LuckyLuke

Puisqu'il s'agit de vos fichiers dans votre ensemble d'applications, je pense que vous pouvez utiliser pathForResource:ofType: pour obtenir le chemin d'accès complet de votre fichier.

Voici un exemple:

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"your_file_name" 
                                            ofType:@"the_file_extension"];
44
Jue Wang

Si vos tuiles ne sont pas dans votre bundle, que ce soit copiées depuis le bundle ou téléchargées depuis Internet, vous pouvez obtenir le répertoire comme ceci

NSString *documentdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *tileDirectory = [documentdir stringByAppendingPathComponent:@"xxxx/Tiles"];
NSLog(@"Tile Directory: %@", tileDirectory);
11
Joe

Vous devez utiliser l'URL du lien, comme celle-ci:

NSURL *path = [[NSBundle mainBundle] URLForResource:@"imagename" withExtension:@"jpg"];

Il vous donnera une référence URL appropriée.

1
Dylan Rosario

Vous devez ajouter vos tuiles à votre ensemble de ressources. Je veux dire ajouter tous ces fichiers à votre projet assurez-vous de copier tous les fichiers dans l'option de répertoire de projet cochée.

0
Rahul Vyas