2016-06-14 4 views
1

Рассмотрим следующий метод, аннотированный его поведением.iOS выбор изображения, возвращающий несуществующий путь к файлу

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

    // Apparently valid URL, looks like 
    // "file:///private/var/mobile/Containers/Data/Application/.../filename.mov" 
    NSURL *videoURL = info[UIImagePickerControllerMediaURL]; 

    // Always evaluates to false; no videos are saved 
    if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(videoURL.absoluteString) {   
     UISaveVideoAtPathToSavedPhotosAlbum(videoURL.absoluteString, self, @selector(video:didFinishSavingWithError:contextInfo:), nil); 
    }  
} 

Почему это не работает, и как его исправить?

ответ

0

Как следует из их названий, методы UIVideoAtPathIsCompatibleWithSavedPhotosAlbum() и UISaveVideoAtPathToSavedPhotosAlbum() ожидают пути, а не URL. Not the same thing.

Строка

file:///private/var/mobile/Containers/Data/Application/.../filename.mov

является URL-, состоящий из схемы

file://

и путь

/private/var/mobile/Containers/Data/Application/.../filename.mov

Функция, предназначенная для приема маршрута, не будет работать корректно при передаче полного URL-адреса.

Для решения проблемы заменить вызовы на videoURL.absoluteString на videoURL.path.