mam pobierania wideo dzięki downloadTaskWithURL a ja ratuję go do mojej galerii z tego kodu:Swift - Pobieranie filmów z 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()
}
to działa perfekcyjnie na moim symulatora ale na moim iPad wideo nie zostanie zapisane, nawet jeśli pojawi się print("Video is saved!");
. Czy masz pojęcie, dlaczego?
ja też mam ten komunikat pojawiający się w moim konsoli
Unable to create data from file (null)
w dokumentacji 'completionHandler 'część metody' downloadTaskWithURL' mówi: "Musisz przenieść ten plik lub otworzyć go do odczytu, zanim zakończy się returnHandler". Wygląda na to, że cały czas jesteś wewnątrz programu obsługi zakończenia, ale być może (i zgaduję, że tutaj) wywołujesz inną metodę ('performChanges') w swoim zakończeniuHandler coś zepsuje. Czy mógłbyś spróbować skopiować plik do innej lokalizacji, zanim zadzwonisz do 'performChanges'? – pbodsk
Jestem względnie nowy w Swift. Czy możesz mi podać przykład tego, jak to zrobić? –
Potrzebujesz 'sourceURL' typu NSURL, to jest twoja' lokalizacja' to potrzebujesz 'destinationURL' możesz wziąć' location' i dołączyć coś do niej, może 'let destination = NSURL (fileURLWithPath: location.absoluteString + "_dest") '. Kiedy już będziesz potrzebował 'fileManager' typu' NSFileManager', np. 'Let fileManager = NSFileManager.defaultManager()'. Następnie jesteś gotowy do przeniesienia pliku, mówiąc: 'fileManager.moveItemAtURL (location, toURL: destination)'. Ta metoda "wyrzuca", więc musisz ją zawijać w 'do ... try ... catch'. Nadzieja, że ma sens – pbodsk