Konwertuj NSURL na NSString


336

Mam aplikację, w której użytkownik może wybrać obraz z wbudowanych obrazów aplikacji lub z biblioteki zdjęć iPhone'a. Korzystam z obiektu Okazja, która ma NSStringwłaściwość do zapisania imagePath.

Teraz w przypadku wbudowanych obrazów aplikacji otrzymuję nazwę pliku jako NSStringzapis w [occasion imagePath]. Ale w drugim przypadku, gdy użytkownik wybiera obraz z biblioteki zdjęć, otrzymuję obraz, NSURLktóry chcę przekonwertować na, NSStringaby móc go zapisać [occasion imagePath].

Czy można przekonwertować NSURLplik na NSString?

Odpowiedzi:


682

W celu C:

NSString *myString = myURL.absoluteString;

W Swift:

var myString = myURL.absoluteString

Więcej informacji w dokumentach :


132

Jeśli interesuje Cię czysty ciąg:

[myUrl absoluteString];

Jeśli interesuje Cię ścieżka reprezentowana przez adres URL (i NSFileManagerna przykład z metodami):

[myUrl path];

Cześć, dzięki za odpowiedź. Gdy próbuję załadować obraz ze strainga, który zapisałem, naprawdę interesuje mnie to, co wspomniałeś o używaniu NSFileManager z [myUril path];Kiedy użyłem ścieżki zamiast absolutnego asset.jpgciągnięcia, dało mi to nazwę Czy możesz prosić o bardziej szczegółowe opracowanie tego, jak to wykorzystać, aby załadować obraz do instancji UIImage?
Ali,

Cześć. Oczywiście z nazwy pliku, aby uzyskać prawdziwą ścieżkę do systemu plików, musisz wiedzieć, gdzie plik jest przechowywany, a następnie utwórz pełną ścieżkę (katalog + nazwa pliku), tworząc je za pomocą stringByAppendingPathComponent NSString:. Jedynym wyjątkiem od tej reguły jest to, że wiedz, że obraz jest przechowywany w pakiecie aplikacji, w tym przypadku możesz po prostu użyć wywołania [UIImage imageNamed: „name”], które wykona za ciebie całą robotę. Ale w innych przypadkach musisz podać pełną ścieżkę.
viggio24

Cześć, jeszcze raz dziękuję za odpowiedź. Nadal jestem zdezorientowany, jak załadować obraz do obrazu UII przy użyciu tego NSString, assets-library://asset/asset.JPG?id=1000000001&ext=JPGktóry zapisałem, konwertując wynik [myUrl absoluteString]po przekonwertowaniu go na NSString. Tutaj zadałem to pytanie, ale nie otrzymałem odpowiedzi. Byłbym wdzięczny, jeśli potrafisz odpowiedzieć [ stackoverflow.com/questions/8085267/...
Ali,

2
tak, powinniśmy użyć myUrl.path zamiast myUrl.absoluteString, jeśli chcesz używać go z NSFileManager, dzięki Viggo24 !!
flypig

Ponieważ masz assets-libraryadres URL, a nie filejeden, jest on niezgodny z NSFileManager. Dostęp do takich adresów URL jest ściśle kontrolowany przez ALAssetsLibrary.
Mike Abdullah

46

Wypróbuj to w Swift:

var urlString = myUrl.absoluteString

Cel C:

NSString *urlString = [myURL absoluteString];

Użyłem NSString * urlString = [myURL absolutString]; Ale napotkałem ten błąd i xcode został zawieszony. - [__ NSCFString absolutString]: nierozpoznany selektor wysłany do instancji 0x791a18e0
Võ Mai Trinh

@ VõMaiTrinh, co oznacza, że ​​twój myURLjest obiektem klasy NSString. Ponieważ NSString nie ma absoluteStringmetody, prowadzi to do awarii.
beryl

17

Szybka aktualizacja:

var myUrlStr : String = myUrl.absoluteString

10
Można pominąć, Stringponieważ Swift używa wnioskowania typu.
Salavat Khanov,

Właściwie powinieneś pominąć String- w wytycznych szybkiego projektowania staramy się uzyskać jak najmniej nadmiarowego kodu, jak to możliwe.
zwróć prawdę

1

Właśnie walczyłem z tym i ta aktualizacja nie działała.

W końcu zrobiło to w Swift:

let myUrlStr : String = myUrl!.relativePath!

1

Możesz użyć w jeden sposób

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

lub

NSString *str=[url1 absoluteString];

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

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

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

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


0

W Swift: - var str_url = yourUrl.absoluteString

Spowoduje to wyświetlenie adresu URL w ciągu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.