Konvertieren Sie eine NSURL in einen NSString


336

Ich habe eine App, in der der Benutzer ein Bild entweder aus den integrierten App-Bildern oder aus der iPhone-Fotobibliothek auswählen kann. Ich verwende ein Objekt Occasion, das eine NSStringEigenschaft hat, um das zu speichern imagePath.

Jetzt bekomme ich bei den eingebauten App-Images den Dateinamen als NSStringSpeicher in der [occasion imagePath]. Aber im zweiten Fall, in dem der Benutzer ein Bild aus der Fotobibliothek auswählt, erhalte NSURLich ein Bild, das ich in ein konvertieren möchte NSString, um es speichern zu können [occasion imagePath.

Ist es möglich, das NSURLin ein umzuwandeln NSString?

Antworten:


682

In Ziel-C:

NSString *myString = myURL.absoluteString;

In Swift:

var myString = myURL.absoluteString

Weitere Infos in den Dokumenten :


132

Wenn Sie an der reinen Saite interessiert sind:

[myUrl absoluteString];

Wenn Sie an dem Pfad interessiert sind, der durch die URL dargestellt wird (und der beispielsweise mit NSFileManagerMethoden verwendet werden soll):

[myUrl path];

Hallo, danke für deine Antwort. Als ich versuche , das Bild von der laden Straing ich gerettet, ich bin wirklich interessiert , was Sie erwähnt über die Verwendung von NSFileManager mit [myUril path];Wenn ich Pfad anstelle von absoluteString es mir den Namen gab asset.jpgKönnten Sie Bitten eelaborate mehr , wie diese zu verwenden , um das Bild in eine UIImage-Instanz laden?
— Ali

Hallo. Um einen echten Dateisystempfad zu erhalten, müssen Sie natürlich anhand des Dateinamens wissen, wo die Datei gespeichert ist, und dann den vollständigen Pfad (Verzeichnis + Dateiname) erstellen, indem Sie sie mit der Zeichenfolge StringByAppendingPathComponent von NSString zusammenstellen: Die einzige Ausnahme von dieser Regel ist, wenn Sie Wenn Sie wissen, dass das Bild im App-Bundle gespeichert ist, können Sie in diesem Fall einfach den Aufruf [UIImage imageNamed: "name"] verwenden, der den gesamten Job für Sie erledigt. In den anderen Fällen müssen Sie jedoch Ihren vollständigen Pfad angeben.
— Viggio24

Hallo, nochmals vielen Dank für Ihre Antwort. Ich bin immer noch verwirrt darüber, wie das Bild mit diesem NSString in ein UIImage geladen wird, assets-library://asset/asset.JPG?id=1000000001&ext=JPGdas ich durch Konvertieren des Ergebnisses [myUrl absoluteString]nach dem Konvertieren in einen NSString gespeichert habe. Hier habe ich diese Frage zu diesem Thema gestellt, aber keine Antwort erhalten. Ich würde es begrüßen,
— Ali

2
Ja, wir sollten myUrl.path anstelle von myUrl.absoluteString verwenden, wenn Sie es mit NSFileManager verwenden möchten, danke Viggo24 !!
— Flypig

Da Sie keine assets-libraryURL, sondern eine URL haben, fileist diese nicht kompatibel mit NSFileManager. Der Zugriff auf solche URLs wird streng von kontrolliert ALAssetsLibrary.
— Mike Abdullah

46

Versuchen Sie dies in Swift:

var urlString = myUrl.absoluteString

Ziel c:

NSString *urlString = [myURL absoluteString];

Ich habe NSString verwendet * urlString = [myURL absoluteString]; Aber ich hatte diesen Fehler festgestellt und xcode war abgestürzt. - [__ NSCFString absoluteString]: nicht erkannter Selektor an Instanz 0x791a18e0 gesendet
— Võ Mai Trinh

@ VõMaiTrinh bedeutet, dass Sie myURLein Objekt der NSString-Klasse sind. Da NSString keine absoluteStringMethode hat, führt dies zu einem Absturz.
— Beryllium

17

Schnelles Update:

var myUrlStr : String = myUrl.absoluteString

10
Sie können dies weglassen, Stringda Swift die Typinferenz verwendet.
— Salavat Khanov

Sie sollten es eigentlich weglassen String- die Swift Design Guidelines versuchen, so wenig redundanten Code wie möglich zu erreichen.
— Rückgabe wahr

1

Ich habe gerade mit genau dieser Sache gekämpft und dieses Update hat nicht funktioniert.

Dies geschah schließlich in Swift:

let myUrlStr : String = myUrl!.relativePath!

1

Sie können einen beliebigen Weg verwenden

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

oder

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

In Swift: - var str_url = yourUrl.absoluteString

Es wird eine URL in der Zeichenfolge angezeigt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.