Преобразовать NSURL в NSString


336

У меня есть приложение, в котором пользователь может выбрать изображение из изображений встроенного приложения или из библиотеки фотографий iphone. Я использую объект Occasion, у которого есть NSStringсвойство для сохранения imagePath.

Теперь в случае изображений встроенного приложения я получаю имя файла в NSStringкачестве сохранения в [occasion imagePath]. Но во втором случае, когда пользователь выбирает изображение из библиотеки фотографий, я получаю изображение, NSURLкоторое хочу преобразовать в, NSStringчтобы иметь возможность сохранить его в [occasion imagePath].

Можно ли преобразовать NSURLв NSString?

Ответы:



132

Если вы заинтересованы в чистой строке:

[myUrl absoluteString];

Если вас интересует путь, представленный URL-адресом (и, например, для использования с NSFileManagerметодами):

[myUrl path];

Привет, спасибо за твой ответ. Поскольку я пытаюсь загрузить изображение из сохраненного мною стрита, меня действительно интересует то, что вы упомянули об использовании NSFileManager с [myUril path];Когда я использовал path вместо absoluteString, он дал мне имя. asset.jpgНе могли бы вы дать больше подробностей о том, как использовать это для загрузить изображение в экземпляр UIImage?
Али

Здравствуй. Конечно, из имени файла, чтобы получить реальный путь к файловой системе, вам нужно знать, где хранится файл, а затем создать полный путь (каталог + имя файла), составив их с помощью stringByAppendingPathComponent NSString:. Единственное исключение из этого правила - это когда вы Знайте, что изображение хранится в комплекте приложений, в этом случае вы можете просто использовать вызов [UIImage imageNamed: "name"], который сделает всю работу за вас. Но в других случаях вы должны указать свой полный путь.
viggio24

Привет, еще раз спасибо за ваш ответ. Я все еще не понимаю, как загрузить изображение в UIImage, используя эту строку NSString, assets-library://asset/asset.JPG?id=1000000001&ext=JPGкоторую я сохранил, преобразовав результат [myUrl absoluteString]после преобразования его в строку NSString. Здесь я сделал этот вопрос по этому поводу, но не получил ответа. Буду признателен, если вы сможете ответить на него [ stackoverflow.com/questions/8085267/…
Али

2
да, мы должны использовать myUrl.path вместо myUrl.absoluteString, если вы хотите использовать его с NSFileManager, спасибо Viggo24 !!
flypig

Поскольку у вас есть assets-libraryURL, а не fileодин, он несовместим с NSFileManager. Доступ к таким URL строго контролируется ALAssetsLibrary.
Майк Абдулла

46

Попробуйте это в Swift:

var urlString = myUrl.absoluteString

Objective-C:

NSString *urlString = [myURL absoluteString];

Я использовал NSString * urlString = [myURL absoluteString]; Но я встретил эту ошибку, и xcode потерпел крах. - [__NSCFString absoluteString]: нераспознанный селектор отправлен в экземпляр 0x791a18e0
Võ Mai Trinh

@ VõMaiTrinh, что означает, что вы myURL- объект класса NSString. Поскольку у NSString нет absoluteStringметода, это приводит к сбою.
бериллий

17

Быстрое обновление:

var myUrlStr : String = myUrl.absoluteString

10
Вы можете опустить, Stringтак как Swift использует вывод типа.
Салават Ханов

Вы на самом деле должны опустить это String- Swift Design Guidelines пытается создать как можно меньше избыточного кода.
верни истину

1

Я просто боролся с этой самой вещью, и это обновление не работало.

В конечном итоге это произошло в Swift:

let myUrlStr : String = myUrl!.relativePath!

1

Вы можете использовать любой способ

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

или

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.