341 votes

Convertir un NSURL en NSString

J'ai une application où l'utilisateur peut choisir une image parmi les images intégrées à l'application ou dans la photothèque de l'iphone. J'utilise un objet Occasion qui a un NSString pour enregistrer le imagePath .

Maintenant, dans le cas des images de l'application intégrée, j'obtiens le nom du fichier sous la forme d'un nom de fichier. NSString une sauvegarde dans le [occasion imagePath] . Mais dans le deuxième cas, lorsque l'utilisateur choisit une image dans la photothèque, j'obtiens un message d'erreur. NSURL que je veux convertir en un NSString pour pouvoir l'enregistrer dans [occasion imagePath ].

Est-il possible de convertir le NSURL à un NSString ?

691voto

Randall Points 6284

En Objective-C :

NSString *myString = myURL.absoluteString;

Dans Swift :

var myString = myURL.absoluteString

Plus d'informations dans le docs :

135voto

viggio24 Points 8077

Si vous êtes intéressé par la corde pure :

[myUrl absoluteString];

Si vous êtes intéressé par le chemin représenté par l'URL (et à utiliser avec NSFileManager par exemple) :

[myUrl path];

0 votes

Bonjour, merci pour votre réponse. Comme j'essaie de charger l'image à partir de la sangle que j'ai sauvegardée, je suis vraiment intéressé par ce que vous avez mentionné à propos de l'utilisation de NSFileManager avec [myUril path]; Quand j'ai utilisé path au lieu de absoluteString cela m'a donné le nom asset.jpg Pourriez-vous nous expliquer plus en détail comment utiliser cette méthode pour charger l'image dans une instance UIImage ?

0 votes

Bien sûr, à partir du nom du fichier, pour obtenir un véritable chemin d'accès au système de fichiers, vous devez savoir où le fichier est stocké, puis créer le chemin d'accès complet (répertoire + nom de fichier) en les composant à l'aide de la fonction stringByAppendingPathComponent de NSString. La seule exception à cette règle est lorsque vous savez que l'image est stockée dans le bundle de l'application, dans ce cas, vous pouvez simplement utiliser l'appel [UIImage imageNamed : "name"] qui fait tout le travail pour vous. Mais dans les autres cas, vous devez spécifier le chemin d'accès complet.

0 votes

Bonjour, merci encore pour votre réponse. Je ne sais toujours pas comment charger l'image dans un UIImage à l'aide de cette NSString. assets-library://asset/asset.JPG?id=1000000001&ext=JPG que j'ai sauvé en convertissant le résultat de [myUrl absoluteString] après l'avoir converti en NSString. J'ai posé une question à ce sujet, mais je n'ai reçu aucune réponse. Je vous serais reconnaissant si vous pouviez y répondre [ stackoverflow.com/questions/8085267/

47voto

beryllium Points 18138

Essayez ceci en Swift :

var urlString = myUrl.absoluteString

Objective-C :

NSString *urlString = [myURL absoluteString];

0 votes

J'ai utilisé NSString *urlString = [myURL absoluteString] ; Mais j'ai rencontré cette erreur et le xcode s'est écrasé. -[__NSCFString absoluteString] : sélecteur non reconnu envoyé à l'instance 0x791a18e0

0 votes

@VõMaiTrinh cela signifie que votre myURL est un objet de la classe NSString. Comme NSString n'a pas de absoluteString alors cela conduit à un crash.

17voto

kmiklas Points 431

Mise à jour rapide :

var myUrlStr : String = myUrl.absoluteString

10 votes

Vous pouvez omettre String puisque Swift utilise l'inférence de type.

0 votes

En fait, vous devrait omettre String - les directives de conception de Swift s'efforcent d'obtenir le moins de code redondant possible.

1voto

Speedz Points 153

Je viens de me battre avec cette même chose et cette mise à jour n'a pas fonctionné.

C'est ce qui a fini par arriver à Swift :

let myUrlStr : String = myUrl!.relativePath!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X