Convertir une NSURL en NSString


336

J'ai une application où l'utilisateur peut choisir une image à partir des images de l'application intégrée ou de la photothèque de l'iphone. J'utilise un objet Occasion qui a une NSStringpropriété pour enregistrer le imagePath.

Maintenant, dans le cas des images d'application intégrées, j'obtiens le nom du fichier comme NSStringsauvegarde dans le [occasion imagePath]. Mais dans le deuxième cas où l'utilisateur choisit une image dans la photothèque, j'obtiens une image NSURLque je veux convertir en une NSStringpour pouvoir l'enregistrer [occasion imagePath].

Est-il possible de convertir le NSURLen un NSString?

Réponses:


682

Dans l'objectif-C:

NSString *myString = myURL.absoluteString;

Dans Swift:

var myString = myURL.absoluteString

Plus d'informations dans la documentation :


132

Si vous êtes intéressé par la chaîne pure:

[myUrl absoluteString];

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

[myUrl path];

Salut, merci pour votre réponse. Comme je suis en train de charger l'image de la straing j'ai sauvé, je suis vraiment intéressé par ce que vous avez mentionné au sujet de l' utilisation NSFileManager avec [myUril path];Quand je voie au lieu de absoluteString il m'a donné le nom asset.jpgPourriez - vous plaidoyers eelaborate plus comment l' utiliser pour charger l'image dans une instance UIImage?
Ali

Salut. Bien sûr, à partir du nom de 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 chaîne NSString stringByAppendingPathComponent: .La seule exception à cette règle est lorsque vous sachez que l'image est stockée dans le bundle d'application, dans ce cas, vous pouvez simplement utiliser l'appel [UIImage imageNamed: "name"] qui fait le travail complet pour vous. Mais dans les autres cas, vous devez spécifier votre chemin complet.
viggio24

Salut, merci encore pour votre réponse. Je ne sais toujours pas comment charger l'image sur un UIImage en utilisant cette NSString assets-library://asset/asset.JPG?id=1000000001&ext=JPGque j'ai enregistrée en convertissant le résultat [myUrl absoluteString]après l'avoir converti en NSString. Ici, j'ai posé cette question à cet égard, mais je n'ai obtenu aucune réponse. Je vous serais reconnaissant si vous pouvez y répondre [ stackoverflow.com/questions/8085267/…
Ali

2
oui, nous devrions utiliser myUrl.path au lieu de myUrl.absoluteString lorsque vous souhaitez l'utiliser avec NSFileManager, merci Viggo24 !!
flypig

Puisque vous avez une assets-libraryURL, plutôt qu'une file, elle est incompatible avec NSFileManager. L'accès à ces URL est strictement contrôlé par ALAssetsLibrary.
Mike Abdullah

46

Essayez ceci dans Swift:

var urlString = myUrl.absoluteString

Objectif c:

NSString *urlString = [myURL absoluteString];

J'ai utilisé NSString * urlString = [myURL absolueString]; Mais j'avais rencontré cette erreur et xcode s'est écrasé. - [__ NSCFString absolueString]: sélecteur non reconnu envoyé à l'instance 0x791a18e0
Võ Mai Trinh

@ VõMaiTrinh cela signifie que votre myURLest un objet de la classe NSString. Comme NSString n'a pas de absoluteStringméthode, cela entraîne un crash.
béryllium

17

Mise à jour rapide:

var myUrlStr : String = myUrl.absoluteString

10
Vous pouvez omettre Stringcar Swift utilise l'inférence de type.
Salavat Khanov

En fait , vous devriez omettre String- les lignes directrices de conception Swift essayer d'atteindre en peu de code redondant possible.
retour vrai

1

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

Cela a finalement fait dans Swift:

let myUrlStr : String = myUrl!.relativePath!

1

Vous pouvez utiliser n'importe quel moyen

NSString *string=[NSString stringWithFormat:@"%@",url1];

ou

NSString *str=[url1 absoluteString];

NSLog(@"string :: %@",string);

string :: file: ///var/containers/Bundle/Application/E2D7570B-D5A6-45A0-8EAAA1F7476071FE/RemoDuplicateMedia.app/loading_circle_animation.gif

NSLog(@"str :: %@", str);

str :: file: ///var/containers/Bundle/Application/E2D7570B-D5A6-45A0-8EAA-A1F7476071FE/RemoDuplicateMedia.app/loading_circle_animation.gif


0

Dans Swift: - var str_url = yourUrl.absoluteString

Il en résultera une URL en chaîne.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.