sto download di un video grazie a downloadTaskWithURL e sto salvandolo alla mia galleria con questo codice:Swift - Scaricare video con 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()
}
Funziona perfettamente bene sul mio simulatore, ma sul mio iPad al il video non viene salvato anche se appare print("Video is saved!");
. Hai qualche idea del perché?
Ho anche quel messaggio che appare nella mia console
Unable to create data from file (null)
la documentazione per il 'completionHandler 'parte del metodo' downloadTaskWithURL' dice "Devi spostare questo file o aprirlo per la lettura prima che il tuo completamentoHandler ritorni". Ora, sembra che tu sia ancora all'interno del gestore di completamento in ogni momento, ma forse (e sto indovinando qui) stai chiamando un altro metodo ('performChanges') all'interno del tuo completamentoHandler sta facendo casino qualcosa. Potresti provare a copiare il file in un'altra posizione prima di chiamare 'performChanges'? – pbodsk
Sono relativamente nuovo a Swift, puoi darmi un esempio di come farlo per favore? –
Hai bisogno di un 'sourceURL' di tipo NSURL, questo è il tuo' posizione', quindi hai bisogno di un 'destinationURL' potresti prendere il' location' e aggiungere qualcosa ad esso, magari 'let destination = NSURL (fileURLWithPath: location.absoluteString + "_dest") '. Una volta che hai bisogno di un 'fileManager' di tipo' NSFileManager', in questo modo 'lascia fileManager = NSFileManager.defaultManager()'. E quindi sei pronto per spostare il file dicendo 'fileManager.moveItemAtURL (location, toURL: destination)'. Quel metodo "getta" quindi è necessario avvolgerlo in un "do ... try ... catch". Spero che abbia senso – pbodsk