Как да конвертирате NSURL в String

Имам клас 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
OP пита за низ, защото са объркани. Изобщо не е необходимо да се включва низ, тъй като необходимостта е да преминете от NSURL към NSURL. - person rmaddy; 28.01.2016
comment
Все още има други отговори, които OP може да разгледа. Просто отговарям на основния въпрос, как да конвертирам 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