Первый запрос в ASINetworkQueue всегда терпит неудачу

Я разрабатываю приложение, которое позволяет загружать подкасты из списка (в виде таблицы). Я использую ASINetworkQueue, чтобы разрешить несколько одновременных загрузок. Загрузки происходят в другом классе (другой контроллер представления в приложении с вкладками), и этот класс уведомляется вызовом «addRequest: (url)»

Проблема, с которой я столкнулся, заключается в том, что я создаю новую очередь, если ASINetworkQueue равна нулю, и я добавляю новый запрос (вызов [queue go] только для первого)

Но мой первый запрос никогда не начинается. У меня есть NSLog в «requestDidStart», и я вижу, что это не вызывается.

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

Мой код ниже:

 -(void)downloadFile:(NSMutableDictionary*)objectDetails fromFeed:(NSString*)feedTitle;
{

 NSMutableDictionary *fileData = [objectDetails mutableCopy];
[fileData setObject:feedTitle forKey:@"fromFeed"];

if(networkQueue==nil)
{
    NSLog(@"------------------>Network queue was NIL. Creating...<------------------");
    self.networkQueue = [ASINetworkQueue queue];
    [self.networkQueue setDelegate:self];
    [self.networkQueue setRequestDidFinishSelector:@selector(requestFinished:)];
    [self.networkQueue setRequestDidStartSelector:@selector(requestDidStart:)];
    [self.networkQueue setRequestDidFailSelector:@selector(requestFailed:)];
    [self.networkQueue setQueueDidFinishSelector:@selector(queueFinished:)];
}



ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:[objectDetails objectForKey:@"audio"]]];
if (request == nil) {
    NSLog(@"There was an error downloading the file");
    return;
}
[request setShouldContinueWhenAppEntersBackground:YES];
[request setDelegate:self];

//Find pathname for file.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"Downloads"];

//If Downloads folder doesnt exist, create it.
NSError *error;
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
    [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; 

NSMutableString *filepath = [NSString stringWithFormat:@"%@/%@",
                             dataPath,[[objectDetails objectForKey:@"audio"] lastPathComponent]];
if([filepath pathExtension] == @"")
{
    NSLog(@"extension did not exist. assuming MP3");
    [filepath appendString:@".mp3"];
}

NSLog(@"Will attempt to download to \n%@",filepath);

[request setDownloadDestinationPath:filepath];
[request setShowAccurateProgress:YES];
[networkQueue setShowAccurateProgress:YES];
[request setDownloadProgressDelegate:self];


[fileData setObject:request forKey:@"request"];
[fileData setObject:[NSNumber numberWithLongLong:0.0] forKey:@"completed"];

//Add this to array that keeps track of downloads
if(!pendingDownloadsArray)
{

    pendingDownloadsArray = [[NSMutableArray alloc] init];

}
[pendingDownloadsArray addObject:fileData];
[fileData release];


[networkQueue addOperation:request];
//Add the request to the queue and start.
if ([networkQueue requestsCount]==1 ) {
    NSLog(@"------------------>>Only 1 request. Starting queue with %d objects<------------------",[networkQueue requestsCount]);
    [networkQueue go];
} 
 }

person mvishnu    schedule 17.05.2011    source источник


Ответы (1)


Вам не нужно проверять количество запросов

достаточно просто использовать «networkqueue go».

person Vanguarder    schedule 15.07.2011