Как преобразовать NSURL в строку

У меня есть класс CameraVC, начинающийся с:

class CameraVC: UITableViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

var imagePicker = UIImagePickerController()
var image = UIImage()
var videoFilePath = NSURL()

...

У меня есть эта функция:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

    let mediaType:String = info[UIImagePickerControllerMediaType] as! String

    print(mediaType)

    if mediaType == "public.image" {
        self.image = info[UIImagePickerControllerOriginalImage] as! UIImage

        if self.imagePicker.sourceType == UIImagePickerControllerSourceType.Camera {
            UIImageWriteToSavedPhotosAlbum(self.image, nil, nil, nil)
        }

        self.dismissViewControllerAnimated(true, completion: nil)

    } else if mediaType == "public.movie" {
        self.videoFilePath = info[UIImagePickerControllerMediaURL] as! NSURL
        print(self.videoFilePath)

        // THIS LINE IS NOT WORK ->
        let url = NSURL(string: self.videoFilePath)

        /*if self.imagePicker.sourceType == UIImagePickerControllerSourceType.Camera {
            if UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(self.videoFilePath) {
                UISaveVideoAtPathToSavedPhotosAlbum(self.videoFilePath, nil, nil, nil)
            }
        }*/
    } 
}

Линия :

    let url = NSURL(string: self.videoFilePath)

не работает, и у меня появляется красное предупреждение «Невозможно преобразовать значение типа NSURL в ожидаемый тип аргумента String.

Линия :

print(self.videoFilePath)

пиши в лог консоли:

file:///private/var/mobile/Containers/Data/Application/071BCA9C-D246-4D14-9D56-34057A17079B/tmp/capture-T0x156501280.tmp.y4Ve7u/capturedvideo.MOV

person Community    schedule 27.01.2016    source источник
comment
Вы можете получить доступ к свойству пути URL, чтобы получить его путь: if let filePath = (info[UIImagePickerControllerMediaURL] as? NSURL).path { print(filePath) }   -  person Leo Dabus    schedule 28.01.2016


Ответы (3)


Если у вас уже есть self.videoFilePath как NSURL, вам не нужно преобразовывать его в String, а затем в NSURL.

Чтобы код был безопаснее:

if let path = info[UIImagePickerControllerMediaURL] as? NSURL {
    self.videoFilePath = path
    let url = path
    //Continue whatever you want
}
person Breek    schedule 27.01.2016

Попробуйте посмотреть документацию здесь: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/#//apple_ref/occ/instp/NSURL/absoluteString

Попробуйте let url = NSURL(string: self.videoFilePath.absoluteString)

Также вы понимаете, что self.videoFilePath уже является NSURL...

person Community    schedule 27.01.2016
comment
Это бессмысленно. Почему бы не просто let url = self.videoFilePath? - person rmaddy; 28.01.2016
comment
@rmaddy Вопрос конкретно в том, как преобразовать NSURL в строку, на что я ответил. Я также указал, что он может повторно использовать уже полученный NSURL. - person ; 28.01.2016
comment
ОП спрашивает о строке, потому что они запутались. Нет никакой необходимости вовлекать строку, так как нужно перейти от NSURL к NSURL. - person rmaddy; 28.01.2016
comment
Есть и другие ответы, на которые может посмотреть ОП. Я просто отвечаю на главный вопрос: как преобразовать NSURL в String. Как я уже сказал, я дополнительно указал, что он пытается преобразовать NSURL в NSURL. - person ; 28.01.2016

У вас плохо названная переменная. self.videoFilePath — это не путь, это URL-адрес. Вы делаете это URL здесь: self.videoFilePath = info[UIImagePickerControllerMediaURL] as! NSURL

person Travis    schedule 27.01.2016
comment
Да, я знаю, я меняю его, когда конвертация работает, спасибо за совет - person ; 28.01.2016