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.