Convierta un NSURL en un NSString


336

Tengo una aplicación donde el usuario puede elegir una imagen de las imágenes de la aplicación incorporadas o de la biblioteca de fotos del iPhone. Yo uso un objeto Ocasión que tiene una NSStringpropiedad para guardar el imagePath.

Ahora, en el caso de las imágenes integradas de la aplicación, obtengo el nombre del archivo como NSStringun guardar en el [occasion imagePath]. Pero en el segundo caso en el que el usuario elige una imagen de la biblioteca de fotos, obtengo una NSURLque quiero convertir en una NSStringpara poder guardarla en [occasion imagePath].

¿Es posible convertir el NSURLa un NSString?

Respuestas:


682

En el objetivo-C:

NSString *myString = myURL.absoluteString;

En Swift:

var myString = myURL.absoluteString

Más información en los documentos :


132

Si estás interesado en la cadena pura:

[myUrl absoluteString];

Si está interesado en la ruta representada por la URL (y para ser utilizada con NSFileManagermétodos, por ejemplo):

[myUrl path];

Hola, gracias por tu respuesta. Cuando estoy tratando de cargar la imagen de la cadena que guardé, estoy realmente interesado en lo que mencionaste sobre el uso de NSFileManager con [myUril path];Cuando usé path en lugar de absoluteString, me dio el nombre asset.jpg¿Podrías por favor trabajar más sobre cómo usar esto para cargar la imagen en una instancia de UIImage?
Ali

Hola. Por supuesto, desde el nombre del archivo para obtener una ruta real del sistema de archivos, necesita saber dónde está almacenado el archivo y luego crear la ruta completa (directorio + nombre de archivo) componiéndolos usando stringByAppendingPathComponent de NSString: la única excepción a esta regla es cuando sabe que la imagen está almacenada en el paquete de la aplicación, en este caso puede usar la llamada [UIImage imageNamed: "name"] que hace el trabajo completo por usted. Pero en los otros casos, debe especificar su ruta completa.
viggio24

Hola, gracias de nuevo por tu respuesta. Todavía estoy confundido sobre cómo cargar la imagen en un UIImage usando este NSString assets-library://asset/asset.JPG?id=1000000001&ext=JPGque guardé al convertir el resultado de [myUrl absoluteString]después de convertirlo en un NSString. Aquí hice esta pregunta al respecto pero no obtuve respuesta. Le agradecería si puede responderlo [ stackoverflow.com/questions/8085267/…
Ali

2
sí, deberíamos usar myUrl.path en lugar de myUrl.absoluteString cuando quieras usarlo con NSFileManager, ¡gracias Viggo24!
flypig

Como tienes una assets-libraryURL, en lugar de una file, es incompatible con NSFileManager. El acceso a tales URL está estrictamente controlado por ALAssetsLibrary.
Mike Abdullah

46

Prueba esto en Swift:

var urlString = myUrl.absoluteString

C objetivo:

NSString *urlString = [myURL absoluteString];

Usé NSString * urlString = [myURL absoluteString]; Pero me encontré con este error y xcode se bloqueó. - [__ NSCFString absoluteString]: selector no reconocido enviado a la instancia 0x791a18e0
Võ Mai Trinh

@ VõMaiTrinh, lo que significa que myURLes un objeto de la clase NSString. Como NSString no tiene absoluteStringmétodo, conduce a un bloqueo.
berilio

17

Actualización rápida:

var myUrlStr : String = myUrl.absoluteString

10
Puede omitir Stringya que Swift usa inferencia de tipos.
Salavat Khanov

En realidad, debe omitir String: las Pautas de diseño de Swift intentan lograr el menor código redundante posible.
Vuelve el verdadero

1

Acabo de pelear con esto y esta actualización no funcionó.

Esto eventualmente lo hizo en Swift:

let myUrlStr : String = myUrl!.relativePath!

1

Puedes usar cualquier forma

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

o

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

En Swift: - var str_url = yourUrl.absoluteString

Resultará una url en cadena.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.