2010-06-23 13 views
1

Je veux utiliser pathForResource, mais il ne semble pas qu'il créera le chemin s'il n'en existe pas. Par conséquent, je suis en train de créer un manuellement en procédant comme suit:iPhone pathForResource vs bundlePath

NSString *path = [NSString stringWithFormat:@"%@/%@.plist",[[NSBundle mainBundle] bundlePath],@"myFileName"]; 

Je crée des fichiers dynamiquement, donc je dois y accéder après que j'ai Build and Run l'application. Mais il met le projet dans un dossier d'identification unique de sorte que le chemin sort à quelque chose comme:

/Users/RyanJM/Library/Application Support/iPhone Simulator/3.0/Applications/80986747-37FD-49F3-9BA8-41A42AF7A4CB/MyApp.app/myFileName.plist 

Mais ce identifiant unique change chaque fois que je fais construire. Quelle est la bonne façon de créer un chemin que je peux atteindre à chaque fois (même dans le simulateur)?

Merci. Mise à jour: édité la question, j'espère pouvoir aider toute personne qui la rencontrera dans le futur.

Mise à jour: IWasRobbed a répondu comme il se doit pour créer une URL de chemin. Mais la meilleure réponse que j'ai pu trouver est de Brad Parks. Cependant, je souhaite qu'il y avait un moyen plus propre.

+0

Avant la construction ou après la construction? – nduplessis

+0

Je ne suis pas sûr de comprendre votre question. J'ai besoin d'accéder au même chemin entre les builds (lors du test du programme dans le simulateur). – RyanJM

+0

Il les crée dynamiquement apparemment, donc il a besoin d'y accéder après les builds (c'est-à-dire une fois que le programme est en cours, il n'avait aucune connaissance préalable du fichier dans le bundle) même s'il le formule différemment. – iwasrobbed

Répondre

1

Avec la façon dont vous avez formulé votre question, voici comment vous lisez un plist qui a été inclus dans le paquet avant la construction:

NSString *propertyListPath = [[NSBundle mainBundle] pathForResource:SomeString ofType:@"plist"]; 

Si vous souhaitez accéder aux répertoires que chaque application a comme unique, zone de stockage pour un fichier que vous créez après la compilation, vous utilisez ceci:

#define kFilename @”data.plist” 

- (NSString *)dataFilePath { 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

return [documentsDirectory stringByAppendingPathComponent:kFilename]; 
} 

Ensuite, vous pouvez vérifier et faire quelques données de manipulation ici:

NSString *filePath = [self dataFilePath]; 

if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { 
// do something with data here 
} 

Vous vous épargnerez beaucoup de problèmes si vous avez acheté/lu Beginning iPhone 3 Development en particulier le chapitre 11 où il va sur la persistance des données (d'où vient cet exemple). C'est un bon livre.

+0

Mais pathForResource renvoie zéro si la ressource n'existe pas. Alors, comment créez-vous le chemin pour une nouvelle ressource? – RyanJM

+0

Voir la mise à jour de la réponse. – iwasrobbed

+0

Merci pour la mise à jour. Et je vais devoir vérifier ce livre. – RyanJM