Obj-C: множественный NSURLDownload - проблема downloadDidFinish () - PullRequest
0 голосов
/ 13 сентября 2011

У меня небольшая проблема с использованием NSURLDownload.В основном я загружаю два разных файла, используя следующий код дважды с измененными именами переменных.

NSURLRequest *requestUserfile = [NSURLRequest requestWithURL:[NSURL URLWithString:requestAgent_url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

NSURLDownload *downloadUserFile = [[NSURLDownload alloc] initWithRequest:requestUserfile delegate:self];

NSString *uf_tpath = [ [ [NSBundle mainBundle] bundlePath ] stringByAppendingPathComponent:@"userfile"]; 

if (downloadUserFile) {
[downloadUserFile setDestination:uf_tpath allowOverwrite:YES];
} else {
NSLog("ERROR: Problem while downloading user file [1].");
exit(0);
}

Но у меня есть проблема, согласно справочному классу Apple, этот код асинхронный и вызывает - (void)downloadDidFinish:(NSURLDownload *)downloadкогда загрузка закончится.

Моей программе нужны два файла, загруженные в папку перед началом какой-либо обработки, так как я могу узнать, когда эти два файла будут загружены?это будет вызвано, когда первый будет закончен: S

Моя первая идея состояла в том, чтобы поместить второй файл загрузки в downloadDidFinish первого ... но тогда я столкнусь с бесконечным циклом иУ меня будет два метода с одинаковым именем: S

PS: я новичок в Obj-C и Xcode, я делал это, используя сигналы и слоты на QT, но там я могу просто определить два слотаразные слоты и подключите их в нужное время.

Спасибо.

1 Ответ

0 голосов
/ 14 сентября 2011

В итоге я применил оператор if к (void)downloadDidFinish:(NSURLDownload *)download для оценки того, что файл ведьмы уже находится на диске, а затем скачал другой файл.

Как

NSString *file1_path = [ [ [NSBundle mainBundle] bundlePath ] stringByAppendingPathComponent:@"file1"];
NSString *file2_path = [ [ [NSBundle mainBundle] bundlePath ] stringByAppendingPathComponent:@"file2"]; 
BOOL f1_is_downdl = [[NSFileManager defaultManager] fileExistsAtPath:file1_path];   
BOOL f2_is_downdl = [[NSFileManager defaultManager] fileExistsAtPath:file2_path];


if ( f1_is_downdl && !(f2_is_downdl) ) { // File 1 is downloaded and the second is not...

    [download release];

    // Now download the file 2!
    NSString *requestFile2_url = [NSString stringWithFormat:@"http://host.org/software/%@-ag", req_id];
    NSURLRequest *requestFile2 = [NSURLRequest requestWithURL:[NSURL URLWithString:requestFile2_url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

    NSURLDownload *downloadFile2 = [[NSURLDownload alloc] initWithRequest:requestFile2 delegate:self];

    if (downloadFile2) {
        [downloadAgent setDestination:file2_path allowOverwrite:YES];
    } else {
        NSLog(@"ERROR: Problem while downloading user file [2].");
        exit(0);
    }

} else if (f1_is_downdl && f2_is_downdl) { // Everything is downloaded!

    // Do something else.

}

Ну ... я знаю, что это, наверное, худший в мире способ сделать это, но ... Я так и понял.

В любом случае, спасибо за информацию, однажды (когда я переписываю это с большим знанием Obj-C), она может быть мне полезна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...