Страницы

Поиск по вопросам

понедельник, 29 октября 2018 г.

Objective-C: проверка наличия файла

Загружаю zip файл в папку в моем приложении. Наблюдаю за прогрессом загрузки от 1% до 100% в моем label. После того, как label = 100% я не нахожу файл в папке. Он появляется спустя 50 секунд. Как я могу постоянно проверять наличие файла в течение 50 секунд, чтобы точно знать кода он появится в папке?
код загрузки
-(IBAction) downloadButton:(id)sender { if (_HighScore == 2) {
_url1 =[NSURL URLWithString:@"link2.zip"];
_downloadTask1 = [_session downloadTaskWithURL:_url1];
[_downloadTask1 resume]; } - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
if (downloadTask == _downloadTask1) { _documentsDirectory1 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; _zipPath1 = [_documentsDirectory1 stringByAppendingPathComponent:@"2.zip"]; } dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
if (downloadTask == _downloadTask1) { NSData *urlData1 = [NSData dataWithContentsOfURL:_url1]; [urlData1 writeToFile:_zipPath1 atomically:YES];}
}); }
UPD
_documentsDirectory1 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; _zipPath1 = [_documentsDirectory1 stringByAppendingPathComponent:@"2.zip"]; _destinationPath1 = [_documentsDirectory1 stringByAppendingPathComponent:@"MediaData"]; _fileExists1 = [[NSFileManager defaultManager] fileExistsAtPath:_zipPath1 isDirectory:false]; if( [SSZipArchive unzipFileAtPath:_zipPath1 toDestination:_destinationPath1] != NO ) { NSLog(@"Dilip Success"); }else{ NSLog(@"Dilip Error"); }


Ответ

как уже написал в комментарии, у вас скачивание происходит два раза - первый вы скачиваете через NSSession, и когда он закончил скачивать и выполнил
- (void)URLSession: downloadTask: didFinishDownloadingToURL:
вы скачиваете еще раз используя
[NSData dataWithContentsOfURL:_url1]
Что вам надо делать, в didFinishDownloadingToURL просто смотреть куда файл скачан и его оттуда брать. типа такого:
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSURL *documentsFolder = [paths objectAtIndex:0];
NSFileManager *fileManager = [NSFileManager defaultManager]; NSURL *newLocation = [NSURL URLWithString:[NSString stringWithFormat:@"file://%@/myCoolFile.txt", documentsFolder]];
NSError *error; [fileManager copyItemAtURL:location toURL:newLocation error:&error];
}

Комментариев нет:

Отправить комментарий