Подтвердить что ты не робот

NSURLSessionDownloadTask downloadTask: didFinishDownloadingToURL файл не существует?

У меня есть NSURLSessionDownloadTask для загрузки нескольких видео одновременно. В нормальном сценарии все работает нормально. Также работает фоновая выборка. Но когда я закрываю приложение и перезапускаю приложение и выполняю тот же файл downloadTask: didFinishDownloadingToURL, то путь к файлу temp, который я получаю, неверен. Файл не существует в пути. Когда я проверял путь через finder, я обнаружил, что файлы существуют, единственное различие заключается в том, что указанный путь не содержит имени файла, а также существует и дополнительная папка с тем же именем родительской папки, в которой должны храниться файлы. Пожалуйста, найдите общий путь ниже

/Users/sfm/Library/Developer/CoreSimulator/Devices/EB96B330-4928-422F-8655-DC0E9781014A/data/Containers/Data/Application/54691CE2-D599-41CA-813B-2A8FF7B868F8/Library/Caches/com.apple.nsurlsessiond/Downloads/com.application.tre/com.application.tre

Может ли кто-нибудь помочь найти путь к загруженному файлу или обработать такие сценарии? Я проводил исследования по поиску решения, но, к сожалению, это не нашло места где

4b9b3361

Ответ 1

При отладке приложения, начиная с iOS8, пути к файлам изменяются каждый раз, когда вы запускаете сеанс отладки (по крайней мере, в Simulator).

Проверьте идентификатор приложения в пути, он иногда изменяется при его отладке.

Начиная с iOS8, вы должны использовать это для файловURL:

NSURL *documentsPath = [[[NSFileManager defaultManager] URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask] lastObject];

В setDownloadTaskDidFinishDownloadingBlock: я использую это, чтобы вернуть файлURL, где он должен сохранить файл:

return [documentsPath URLByAppendingPathComponent:fileName];

Чтобы открыть файл:

NSURL *fileURL = [documentsPath URLByAppendingPathComponent:fileName];

Чтобы удалить файл:

NSURL *fileURL = [documentsPath URLByAppendingPathComponent:fileName];
NSError *error = nil;
[[NSFileManager defaultManager] removeItemAtURL:fileURL error:&error];