Chuyển đổi NSURL thành NSString


336

Tôi có một ứng dụng mà người dùng có thể chọn một hình ảnh từ hình ảnh ứng dụng tích hợp hoặc từ thư viện ảnh iphone. Tôi sử dụng một đối tượng Dịp có một NSStringtài sản để lưu imagePath.

Bây giờ trong trường hợp hình ảnh ứng dụng tích hợp, tôi nhận được tên tệp dưới dạng NSStringlưu trong [occasion imagePath]. Nhưng trong trường hợp thứ 2 khi người dùng chọn một hình ảnh từ thư viện ảnh tôi nhận được một NSURLcái mà tôi muốn chuyển đổi thành một cái NSStringđể có thể lưu nó vào [occasion imagePath].

Có thể chuyển đổi NSURLthành một NSString?

Câu trả lời:


682

Trong Mục tiêu-C:

NSString *myString = myURL.absoluteString;

Trong Swift:

var myString = myURL.absoluteString

Thêm thông tin trong các tài liệu :


132

Nếu bạn quan tâm đến chuỗi thuần túy:

[myUrl absoluteString];

Nếu bạn quan tâm đến đường dẫn được đại diện bởi URL (và được sử dụng với NSFileManagercác phương thức chẳng hạn):

[myUrl path];

Xin chào, Thanx cho câu trả lời của bạn. Khi tôi đang cố tải hình ảnh từ chế độ căng thẳng mà tôi đã lưu, tôi thực sự quan tâm đến những gì bạn đã đề cập về việc sử dụng NSFileManager với [myUril path];Khi tôi sử dụng đường dẫn thay vì asset.jpgperfectString, nó cho tôi biết bạn có thể sử dụng cái này để sử dụng cái này không tải hình ảnh vào một ví dụ UIImage?
Ali

Chào. Tất nhiên từ tên tệp để có đường dẫn hệ thống tệp thực, bạn cần biết tệp được lưu ở đâu và sau đó tạo đường dẫn đầy đủ (thư mục + tên tệp) bằng cách soạn chúng bằng chuỗiByAppendingPathComponent của NSString. biết hình ảnh được lưu trữ trong gói ứng dụng, trong trường hợp này bạn chỉ có thể sử dụng lệnh gọi [UIImage imageNamed: "name"] để thực hiện toàn bộ công việc cho bạn. Nhưng trong các trường hợp khác, bạn phải xác định đường dẫn đầy đủ của mình.
viggio24

Xin chào, thanx một lần nữa cho câu trả lời của bạn. Tôi vẫn bối rối về cách tải hình ảnh vào UIImage bằng NSString này assets-library://asset/asset.JPG?id=1000000001&ext=JPGmà tôi đã lưu bằng cách chuyển đổi kết quả [myUrl absoluteString]sau khi chuyển đổi nó thành NSString. Ở đây tôi đã đặt câu hỏi này về vấn đề này nhưng không có câu trả lời. Tôi sẽ đánh giá cao nếu bạn có thể trả lời nó [ stackoverflow.com/questions/8085267/ Kẻ
Ali

2
có, chúng ta nên sử dụng myUrl.path thay vì myUrl.absoluteString khi bạn muốn sử dụng nó với NSFileManager, cảm ơn Viggo24 !!
flypig

Vì bạn có một assets-libraryURL, thay vì một URL file, nó không tương thích với NSFileManager. Truy cập vào các URL như vậy được kiểm soát chặt chẽ bởi ALAssetsLibrary.
Mike Abdullah

46

Hãy thử điều này trong Swift:

var urlString = myUrl.absoluteString

Mục tiêu-C:

NSString *urlString = [myURL absoluteString];

Tôi đã sử dụng NSString * urlString = [myURL perfectString]; Nhưng tôi đã gặp lỗi này và xcode đã bị sập. - [__ NSCFString perfectString]: bộ chọn không được nhận dạng được gửi đến phiên bản 0x791a18e0
Võ Mai Trinh

@ VõMaiTrinh có nghĩa là bạn myURLlà đối tượng của lớp NSString. Vì NSString không có absoluteStringphương pháp nên nó dẫn đến sự cố.
berili

17

Cập nhật nhanh:

var myUrlStr : String = myUrl.absoluteString

10
Bạn có thể bỏ qua Stringvì Swift sử dụng kiểu suy luận.
Salavat Khanov

Bạn thực sự nên bỏ qua String- Nguyên tắc thiết kế Swift cố gắng đạt được càng ít mã dự phòng càng tốt.
trả lại đúng

1

Tôi chỉ chiến đấu với điều này và bản cập nhật này đã không hoạt động.

Điều này cuối cùng đã làm trong Swift:

let myUrlStr : String = myUrl!.relativePath!

1

Bạn có thể sử dụng bất kỳ một cách

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

hoặc là

NSString *str=[url1 absoluteString];

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

chuỗi :: file: ///var/containers/Bundle/Application/E2D7570B-D5A6-45A0-8EAAA1F7476071FE/RemoD repeatateMedia.app / load_c_cle_animation.gif

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

str :: file: ///var/containers/Bundle/Application/E2D7570B-D5A6-45A0-8EAA-A1F7476071FE/RemoD repeatateMedia.app / load_c_cle_animation.gif


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.