38 votes

Comment obtenir le chemin d'accès au fichier dans l'application iPhone

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

Je suis actuellement en utilisant

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

pour accéder à mon carrelage pour ma MKOverlay. Cela me donne de ce répertoire

/Utilisateurs/xxxx/Bibliothèque/Application Support/Simulateur d'iPhone/4.2/Applications/9D62025C-C53B-472C-8309-xxxx/xxxx.app/Carreaux

Le x est uniquement pour des raisons de confidentialité

J'ai mon carrelage dans un dossier appelé Tiles à la racine de mon application qui est dans Xcode dans un groupe appelé" Tiles qui est directement dans l' Resources du groupe.

Quand je lance mon application, j'obtiens une simple erreur disant qu'il ne pouvait pas trouver mon carrelage au répertoire générées (la citation ci-dessus) Si je remplace ce morceau de code et de le rendre:

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

Puis mon application fonctionne très bien. C'est évidemment parce qu'il trouve mes tuiles en direct de localisation sur mon Mac. C'est très bien pour tester, mais j'en ai besoin pour travailler sur mon iPhone/iPad.

Ce problème peut se produire en raison de:

  • Le répertoire générées est incorrect.
  • La tuile images ne sont pas inclus dans le bâti .app le fichier.

De toute façon, 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é le morceau de code:

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

Maintenant, il travaille dans le simulateur, car tous les fichiers sont dans les apps dossier racine et je ne le demandez pas à entrer dans un autre répertoire appelé "Tuiles".

Cela s'exécute sans erreur sur le simulateur, mais quand sur mon iPhone, il donne l'erreur d'origine (juste un autre chemin d'accès au fichier, mais aussi se terminant par /xxxx.app

Comment puis-je assurer un répertoire de mon application fichier tel qu' xxxx.app/Tiles - TileMap fait cela.

44voto

Jue Wang Points 251

Puisque c'est votre fichiers dans votre application bundle, je pense que vous pouvez utiliser pathForResource:ofType: pour obtenir le chemin complet de votre fichier.

Voici un exemple:

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

19voto

LuckyLuke Points 8241

Rappelez-vous que les "dossiers/groupes de" que vous faites dans xcode, ceux qui sont de couleur jaunâtre ne sont pas reflétés comme de véritables dossiers dans votre application iPhone. Ils sont juste là pour la structure de votre projet XCode. Vous pouvez imbriquer autant de jaune groupe que vous voulez et ils continuent seulement servir les fins de l'organisation de code dans XCode.

MODIFIER

Faire un dossier en dehors de XCode, puis faites-la glisser sur, et sélectionnez "Créer un dossier de références pour tout ajout de dossiers" au lieu de "Créer des groupes pour tout ajout de dossiers" dans le menu contextuel.

11voto

Joe Points 37343

Si vos tuiles ne sont pas dans votre bundle, soit copié à partir de l'ensemble ou téléchargé à partir d'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);

0voto

Rahul Vyas Points 11311

Vous devez ajouter votre carrelage dans votre regroupement de ressources. Je veux dire ajouter ces fichiers à votre projet, assurez-vous de copier tous les fichiers du répertoire de projet option cochée.

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