NSBundle, plist et d'autres ressources en Obj-c Bibliothèque Statique
J'ai créé une bibliothèque statique dans Xcode, que je suis en mesure d'utiliser avec succès dans d'autres projets. Cependant, avec des ressources comme les plists, je trouve que je doit comprendre toutes les plists référencées dans ma bibliothèque dans le projet principal, où le projet est utilisé.
Dans mon projet de bibliothèque statique, j'ai mon plist inclus dans le "Copier Bundle de Ressources" de la phase de la cible. Dans mon code, voici ce que je fais:
NSBundle *mainBundle = [NSBundle mainBundle];
NSString *filePath = [mainBundle pathForResource:@"MyClassParams" ofType:@"plist"];
NSMutableDictionary* params = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
Si j'utilise mainBundle et la MyClassParams.plist est inclus dans le projet principal, tout est bon. Si MyClassParams.plist est inclus dans le projet d'une bibliothèque, il ne fonctionne pas.
Sur l'hypothèse que [NSBundle mainBundle] faisait référence à la mauvaise méthode statique à utiliser, je l'ai remplacé par:
NSBundle *mainBundle = [NSBundle bundleForClass:[MyClass class]];
Cela ne fonctionne pas non plus.
Donc, est-il possible d'inclure un fichier plist ou de toutes autres ressources avec une bibliothèque statique -- ou dois-je inclure tout ce dont j'ai besoin dans le projet où la lib est utilisé?
- Le démarrage d'une prime à la question -- est la réponse reste correct comme de l'iOS 4.2?
Vous devez vous connecter pour publier un commentaire.
Bibliothèques statiques ne sont pas en faisceaux, quand ils obtiennent lié à une application qu'ils font partie des applications bundle. Sur l'iPhone, effectivement tout le code que vous écrivez sera dans le mainBundle puisque vous ne pouvez pas comporter de cadres.
Donc, oui, vous avez besoin de copier toutes les ressources dans le projet de relier le cadre statique dans.
Je sais que vous ne pouvez pas inclure des fichiers de ressources dans une bibliothèque statique (c'est ce que les cadres de le faire).
J'utilise une autre solution dans mes projets:
À l'intérieur de la bibliothèque statique "YYY" projet:
À l'intérieur du projet:
libYYY.a
YYY.bundle
pour la copie de fichiers de ressourcesDe cette façon, les fichiers de ressources utilisées dans la bibliothèque statique ne sont pas gérés dans le projet principal. Dire que j'ai un
foo.png
image dans la bibliothèque statique, j'utiliseVous pourriez obtenir votre plist comme ceci:
Ci-dessous, deux captures d'écran:
J'ai suivi tout @Jilouc suggéré, cependant, je peux obtenir le bundle, mais a échoué à obtenir des fichiers à l'intérieur. J'ai essayé les deux, des deux façons (
@"yyy.bundle/image"
oustaticlib pathforresource...
)Ensuite, j'ai utilisé la méthode ci-dessous et cela a fonctionné!