Je crée une application simple avec xcode et objc et j'ai besoin de charger un NSDictionary à partir d'un fichier, mais je ne peux pas obtenir le chemin d'accès au fichier à l'aide de NSBundle:
NSString *l = [[NSBundle mainBundle] pathForResource:@"LoginStatuses" ofType:@"plist"];
NSLog(@"%@", l);
Lorsque j'exécute ce code, j'obtiens ceci:
16/10/2010 10: 42: 42.42 Échantillon [5226: a0f] (null)
Et je ne sais pas pourquoi.
J'ai créé un groupe appelé Resources et là j'ai ajouté le LogingStatuses.plist:
Voici donc la solution à ce problème après avoir obtenu la source:
Je n'ai pas vraiment fait attention à la capture d'écran publiée, mais la cible est de type "Outil de ligne de commande" ... et puisque ceux-ci n'ont pas de bundle [NSBundle mainBundle]
renvoie bien sûr zéro. Il est assez trompeur de dire que Xcode ne se plaint pas qu'il ne peut pas exécuter l'étape "Copy Bundle Resources", il l'ignore silencieusement.
La solution consiste simplement à ajouter une nouvelle cible, de type "Application" afin qu'une application basée sur un bundle soit générée. Cochez ensuite les cases Target Membership pour toutes les sources et ressources de cette nouvelle cible. Les chemins de plist sont alors correctement résolus.
J'essayais d'obtenir que mon application iPhone utilise une base de données sqlite par défaut et l'application Darn ne pouvait pas la trouver. Il s'est avéré que je devais m'assurer que le fichier .sqlite était dans la ressource du bundle.
maintenant, votre application trouvera cette base de données sqlite par défaut.
Le fichier est-il vraiment inclus dans la cible (et sera-t-il donc copié dans le bundle)? Il existe deux façons de découvrir/définir cela:
Première façon: faites un clic droit (ou Cmd-clic) sur le fichier, sélectionnez "Get Info". Cliquez ensuite sur l'onglet "Cibles" et assurez-vous que le fichier est vérifié pour la ou les cibles souhaitées.
Deuxième façon: faites un clic droit (ou horloge Cmd) dans le navigateur de projet sur l'en-tête du navigateur de fichiers (il lira probablement "Groupes et fichiers"). Sélectionnez ensuite "Adhésion cible". Vous avez maintenant des cases à cocher à côté de chaque fichier qui peut être membre d'une cible (comme les fichiers .m ou les ressources). Encore une fois, assurez-vous que la case à côté de votre fichier est cochée.
Depuis que j'ai googlé ici, je n'ai pas trouvé la réponse, mais je l'ai découverte par moi-même, je vais la laisser ici ...
J'avais 2 fichiers: tray.png et [email protected] pour Retina. Les fichiers ont été ajoutés automatiquement à "Copy Bundle Resources".
Mais:
[[NSBundle mainBundle] pathForResource:@"tray" ofType:@"png"];
n'a pas renvoyé le fichier réellement copié dans le bundle! La raison en était: IDE a créé un fichier TIFF tray.tiff (joint tray.png et [email protected])), donc ... ofType:@"tiff"]
aidé!
J'ai rencontré ce problème aujourd'hui avec un projet de ligne de commande.
Heureusement, la solution est simple. Allez simplement dans "Build Phases", cliquez sur "+" et ajoutez une nouvelle phase "Copy Files". Choisissez "Ressources" comme destination et ajoutez tous les fichiers que vous souhaitez utiliser.
Maintenant, vous pouvez toujours utiliser [NSBundle mainBundle]
et ça devrait marcher!
Mon problème et ma solution sont très similaires à ceux de Dmitriy Isaev. J'ai essayé d'obtenir le chemin d'un fichier xib. Les appels (dans Swift) pathForResource ("monfichier", ofType: "xib") et pathForResource ("myfile.xib", ofType: nil) ont échoué.
La solution consiste à utiliser l'extension "nib" à la place:
pathForResource("myfile", ofType: "nib")
Le nom de fichier est sensible à la casse sur iPad. Vous devez utiliser des lettres minuscules.