Swift – 使用downloadTaskWithURL下载video

我正在下载一个video感谢downloadTaskWithURL,我保存到我的画廊与此代码:

func saveVideoBis(fileStringURL:String){ print("saveVideoBis"); let url = NSURL(string: fileStringURL); (NSURLSession.sharedSession().downloadTaskWithURL(url!) { (location:NSURL?, r:NSURLResponse?, e:NSError?) -> Void in let mgr = NSFileManager.defaultManager() let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]; print(documentsPath); let destination = NSURL(string: NSString(format: "%@/%@", documentsPath, url!.lastPathComponent!) as String); print(destination); try? mgr.moveItemAtPath(location!.path!, toPath: destination!.path!) PHPhotoLibrary.requestAuthorization({ (a:PHAuthorizationStatus) -> Void in PHPhotoLibrary.sharedPhotoLibrary().performChanges({ PHAssetChangeRequest.creationRequestForAssetFromVideoAtFileURL(destination!); }) { completed, error in if completed { print(error); print("Video is saved!"); self.sendNotification(); } } }) }).resume() } 

它在我的模拟器上工作得很好,但是在我的iPad上,即使print("Video is saved!");video也不会print("Video is saved!"); 出现。 你知道为什么吗?

我也有这个消息出现在我的控制台

无法从文件创build数据(null)

请通过代码检查评论:

Xcode 8•Swift 3

 import UIKit import Photos class ViewController: UIViewController { func downloadVideoLinkAndCreateAsset(_ videoLink: String) { // use guard to make sure you have a valid url guard let videoURL = URL(string: videoLink) else { return } guard let documentsDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return } // check if the file already exist at the destination folder if you don't want to download it twice if !FileManager.default.fileExists(atPath: documentsDirectoryURL.appendingPathComponent(videoURL.lastPathComponent).path) { // set up your download task URLSession.shared.downloadTask(with: videoURL) { (location, response, error) -> Void in // use guard to unwrap your optional url guard let location = location else { return } // create a deatination url with the server response suggested file name let destinationURL = documentsDirectoryURL.appendingPathComponent(response?.suggestedFilename ?? videoURL.lastPathComponent) do { try FileManager.default.moveItem(at: location, to: destinationURL) PHPhotoLibrary.requestAuthorization({ (authorizationStatus: PHAuthorizationStatus) -> Void in // check if user authorized access photos for your app if authorizationStatus == .authorized { PHPhotoLibrary.shared().performChanges({ PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: destinationURL)}) { completed, error in if completed { print("Video asset created") } else { print(error) } } } }) } catch { print(error) } }.resume() } else { print("File already exists at destination url") } } override func viewDidLoad() { super.viewDidLoad() downloadVideoLinkAndCreateAsset("https://www.yourdomain.com/yourmovie.mp4") } }