web-dev-qa-db-fra.com

Comment accéder aux fichiers locaux dans le projet

Je veux ajouter des fichiers statiques (image, binaire, etc ...) à mon application. Je les ai placés dans un dossier nommé Resources et je l'ai ajouté à mon projet XCode.

Ensuite, j'ai ces fichiers ajoutés au Copy Bundle Resources dans l'onglet Build Phases dans les paramètres du projet.

Cependant, je n'arrive pas à me référer à eux correctement.

Par exemple, lire un fichier binaire:

NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:@"data.bin"];
if(![is hasBytesAvailable]) NSLog(@"wrong");

Cela échoue et imprime toujours wrong

J'ai essayé une approche similaire avec NSData initWithContentsOfFile: mais cela ne s'exécute même pas. Une autre tentative a été d'utiliser [NSBundle mainBundle], mais cela n'a pas non plus été exécuté complètement.

Je suis nouveau sur iOS s'il vous plaît aidez je peux accéder à mes fichiers locaux! Toute aide serait appréciée.

Je vous remercie,

22
chizzle

Vous devez vous assurer que vous accédez au fichier au bon endroit. Xcode place vos fichiers de ressources dans le "lot d'applications" de l'application dans le répertoire Resources . Il y a plusieurs façons de les extraire.

Une méthode courante consiste à obtenir le chemin d'accès d'un fichier dans votre lot:

NSBundle *mainBundle = [NSBundle mainBundle];
NSString *myFile = [mainBundle pathForResource: @"data" ofType: @"bin"];

Si vous avez d'autres fichiers à des emplacements non standard dans votre bundle, il existe des variantes de pathForResource qui vous permettent de spécifier un nom de répertoire.

Si vous voulez voir l'emplacement réel utilisé par le simulateur sur votre disque dur pour pouvoir l'inspecter, vous pouvez dire:

NSLog(@"Main bundle path: %@", mainBundle);
NSLog(@"myFile path: %@", myFile);

Recherchez le "Guide de programmation du paquet" dans la bibliothèque de documentation Xcode pour commencer. :-)

28
Jim Hayes

Utilisez NSBundle class pour cela. Par exemple:

NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"bin"];
NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:path];
...
1
nacho4d

En effet, il est nécessaire d'appeler [est ouvert] même si vous "initialisezAvecFichierAtPath". Je penserais que l'initialisation ouvrirait automatiquement le fichier pour vous, mais ce n'est pas le cas.

0
RoyGal