Quel est le path des fichier dans une application?
Bonjour à tous...
Petite question ! quel est l'URL des fichiers locaux d'une application ?
Je m'explique si j'ai une webView dans mon application et que je veux afficher une image qui se trouve dans l'application quel URL je dois utiliser ?
exemple sur pc je ferais <img src="C:/mondosier/monimage.jpg">
Petite question ! quel est l'URL des fichiers locaux d'une application ?
Je m'explique si j'ai une webView dans mon application et que je veux afficher une image qui se trouve dans l'application quel URL je dois utiliser ?
exemple sur pc je ferais <img src="C:/mondosier/monimage.jpg">
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
NSBundle * mainBundle=[NSBundle mainBundle];
NSString * path=[mainBundle pathForResource:@monimage oftype:@jpg];
NSURL * url=[NSURL fileURLWithPath:path];
Cette structure est créés pour toi à partir de ton projet XCode. Par exemple, ce que tu mets dans le groupe "Resources" du projet XCode, et qui se retrouve dans l'étape "Copy Bundle Resources" de ta cible (target) principale, sera bien embarqué dans le sous-dossier "Resources" de ton application.
Quand bien même on connaà®t la structure interne d'un .app, on ne veut quand même pas écrire les chemins en dur. D'abord, il y a les resources "localisées" (dépendant de la langue actuelle) qui compliquent le tout, et puis ce ne serait pas assez souple. On délègue donc cela aux bonnes APIs.
Comme le dit Philippe49, un dossier "planqué derrière l'apparence d'un fichier" comme l'est un .app est un Bundle; on se tourne donc vers la classe NSBundle. mainBundle permet d'obtenir le bundle de l'application elle-même.
Ensuite, des méthodes comme pathForResource:ofType: sont utilisables.
Astuce : la méthode imageNamed: de NSImage permet de récupérer les images du mainBundle, avec gestion d'un cache mémoire, sans avoir à utiliser NSBundle directement.
+
Chacha
Non. Philippe n'a pas compris ton besoin.
Le chemin que tu as mis dans le tag <img> est une aberration, même sous Windows.
Si tu veux mettre un chemin local dans une url, il faut préciser le protocole (ici file://), ensuite, tu y colles le reste du chemin tel que retourné par NSURL (voir post Philippe).
Cela devrait donner quelque chose comme : <img src="file:///le/chemin/vers/mon.fichier">
Si l'image est copiée en ressource dans ton projet, elle sera dans le bundle de l'application, chez tout utilisateur de ton application.
Maintenant pour la charger dans une WebView, il suffit d'utiliser l'une des méthodes de chargement comme par exemple loadResource: ofType:
Ce n'est pas nécessaire d'écrire un code html !
NSPath * path=[mainBundle pathForResource:@monimage oftype:@jpg];
est dynamique, obtenue à l'exécution et non à la compilation.
Cela veut dire que le path sera celui correspondant à la machine sur laquelle le code est exécuté.
Si je le fais exécuter chez moi, ce path est
/Users/Philippe49/desktop/MonAppli.app/Contents/Resources/monimage.jpg
Si tu le fais exécuter chez toi, c'est
/Users/yodark/..../MonAppli.app/Contents/Resources/monimage.jpg
C'est ce que t'expliques Chacha dans son post.
La seule solution que je vois, c'est d'uploader l'image sur le serveur. je n'ai pas essayé mais j'ai vu beaucoup de messages à ce propos sur les forums iPhone. Je te conseille d'aller voir vers http://www.iphonedevsdk.com/forum/iphone-sdk-development.
J'ai pas été assez clair, je me ré explique
J'ai une page qui se trouve sur internet adaptée a l'iphone, je l'affiche depuis mon application via une webView (par exemple comme cydia qui affiche http://cydia.saurik.com/)
Mais afin de ne pas consommer de la bade passante 3G EDGE ou autre je ne télécharge pas les images parce qu'elles sont déja dans mon application.
Du coup si j'ai les CSS et les images de mon site en local la bande passante utilisée est moindre seul le HTML brut et téléchargé depuis le web
Analyse ton code HTML et récupère tous les <img src=""> afin de récupérer les URL des images, et donc leur nom + extension. Avec ça tu remplaces tout les chemins des images par les chemins qui mènent vers celles de ton application. Tu charges le nouveau NSString qui correspond à la source HTML de ta nouvelle page dans la webview et le tour est joué.
En plus la source HTML de la page est chargée bien avant que le contenu de la webview soit chargé, donc tu peux récupérer le code HTML de la page sans la charger en fait.
Une fois que tu as récupéré le code HTML de la page tu peux faire :
Bon j'ai pondu le code comme ça alors peut-être que ça marchera pas... j'ai fait au felling.
Je t'ai attaché un projet d'exemple dans le message.
Quel est le requirement de NSPath parce que chez moi il ne reconnait pas la commande ?
Utilise NSString comme dans mon code. NSPath n'existe pas.
En effet [tt]pathForResource:ofType:[/tt] retourne bien une NSString... donc c'est bien NSString qu'il faut mettre pour le type de la variable
[EDIT]Arg j'avais pas vu la 2e page et la réponse de Louka :P[/EDIT]
Par contre je comprend pas trop l'intérêt. Pourquoi tu cherches à faire ça exactement ? C'est juste par simple curiosité que je demande, t'es pas obligé de répondre :P
(Moi j'aurai carrément inclu la page HTML ds le projet avec les images & css)