Converter um NSURL em um NSString


336

Eu tenho um aplicativo em que o usuário pode escolher uma imagem nas imagens internas do aplicativo ou na biblioteca de fotos do iphone. Eu uso um objeto Ocasião que possui uma NSStringpropriedade para salvar o imagePath.

Agora, no caso das imagens de aplicativos integradas, recebo o nome do arquivo como NSStringum salvamento no arquivo [occasion imagePath]. Mas no segundo caso em que o usuário escolhe uma imagem da biblioteca de fotos, recebo uma NSURLque quero converter em uma NSStringpara poder salvá-la [occasion imagePath].

É possível converter o NSURLpara um NSString?

Respostas:


682

No Objetivo-C:

NSString *myString = myURL.absoluteString;

Em Swift:

var myString = myURL.absoluteString

Mais informações nos documentos :


132

Se você estiver interessado na string pura:

[myUrl absoluteString];

Se você estiver interessado no caminho representado pelo URL (e para ser usado com NSFileManagermétodos, por exemplo):

[myUrl path];

Olá, Obrigado pela sua resposta. Como eu estou tentando carregar a imagem do straing I salvo, eu estou realmente interessado no que você mencionou sobre o uso NSFileManager com [myUril path];Quando eu usei caminho em vez de absoluteString ele me deu o nome asset.jpgvocê poderia apelos eelaborate mais como usar isso para carregar a imagem em uma instância UIImage?
Ali

Oi. Obviamente, a partir do nome do arquivo, para obter um caminho real do sistema de arquivos, você precisa saber onde o arquivo está armazenado e criar o caminho completo (diretório + nome do arquivo) compondo-os usando stringByAppendingPathComponent do NSString:. A única exceção a essa regra é quando você Se a imagem está armazenada no pacote de aplicativos, nesse caso, você pode usar a chamada [UIImage imageNamed: "name"] que faz o trabalho completo para você. Mas nos outros casos, você deve especificar seu caminho completo.
viggio24

Olá, obrigado novamente pela sua resposta. Ainda estou confuso sobre como carregar a imagem em um UIImage usando este NSString assets-library://asset/asset.JPG?id=1000000001&ext=JPGque eu salvei convertendo o resultado [myUrl absoluteString]depois de convertê-lo em um NSString. Aqui eu fiz essa pergunta a esse respeito, mas não obtive resposta. Eu agradeceria se você puder respondê-lo [ stackoverflow.com/questions/8085267/…
Ali Ali

2
sim, devemos usar myUrl.path em vez de myUrl.absoluteString quando quiser usá-lo com o NSFileManager, obrigado Viggo24 !!
flypig

Como você tem um assets-libraryURL, e não fileum, é incompatível com NSFileManager. O acesso a esses URLs é controlado estritamente por ALAssetsLibrary.
Mike Abdullah

46

Tente isso no Swift:

var urlString = myUrl.absoluteString

Objetivo-C:

NSString *urlString = [myURL absoluteString];

Eu usei NSString * urlString = [myURL absoluteString]; Mas eu encontrei esse erro e o xcode foi travado. - [__ NSCFString absoluteString]: seletor não reconhecido enviado para a instância 0x791a18e0
Võ Mai Trinh

@ VõMaiTrinh significa que você myURLé um objeto da classe NSString. Como o NSString não possui absoluteStringmétodo, isso causa uma falha.
berílio

17

Atualização rápida:

var myUrlStr : String = myUrl.absoluteString

10
Você pode omitir, Stringjá que o Swift usa inferência de tipo.
Salavat Khanov 12/08/14

Você realmente deve omitir String- as Diretrizes de Design Swift tentam obter o mínimo de código redundante possível.
return true

1

Eu apenas lutei com isso e essa atualização não funcionou.

Isso acabou acontecendo em Swift:

let myUrlStr : String = myUrl!.relativePath!

1

Você pode usar qualquer caminho

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

Em Swift: - var str_url = yourUrl.absoluteString

Isso resultará em um URL na string.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.