2011-11-08 12 views
7

Pracuję nad problemem, w którym muszę pobrać około 10 różnych dużych plików w kolejce i muszę wyświetlić pasek postępu wskazujący status całkowitego transferu. Mam to działa dobrze z ASIHTTPRequest w iOS4, ale próbuję przejść do AFNetworking, ponieważ ASIHTTPRequest ma problemy w iOS5 i nie jest już utrzymywane.Przejście do AFNetworking z ASIHTTPRequest - Problem z ASINetworkQueue

Wiem, że możesz raportować postępy w poszczególnych żądaniach za pomocą metody downloadProgressBlock dostępnej w AFHTTPRequestOperation, ale nie mogę znaleźć sposobu na raportowanie ogólnego postępu wielu żądań, które byłyby wykonywane na tym samym obiekcie NSOperationQueue.

Wszelkie sugestie? Dzięki!

Odpowiedz

0

Chciałbym spróbować podklasy UIProgressView z podklasy, która śledzi wszystkie różne przedmioty, które oglądasz, a następnie ma logikę, która dodaje postęp wszystkich razem.

Z kodu tak może:

@implementation customUIProgressView 

-(void) updateItem:(int) itemNum ToPercent:(NSNumber *) percentDoneOnItem { 
    [self.progressQueue itemAtIndexPath:itemNum] = percentDoneOnItem; 

    [self updateProgress]; 
} 
-(void) updateProgress { 
    float tempProgress = 0; 
    for (int i=1; i <= [self.progressQueue count]; i++) { 
    tempProgress += [[self.progressQueue itemAtIndexPath:itemNum] floatValue]; 
    } 
    self.progress = tempProgress/[self.progressQueue count]; 
} 
+0

To jest złe kodowanie praktyki dla MVC wzorce projektowe. –

+0

Być może. Jest to odpowiednie narzędzie do pracy dla treści o dynamicznym rozmiarze. Będzie dokładnie pokazywał postęp bez konieczności wcześniejszego poznania rozmiaru treści. Znalezienie rozmiaru dużych plików (takich jak filmy lub zdjęcia) może być kosztowną operacją. – clreina

0

Można podklasy AFURLConnectionOperation mieć 2 nowe właściwości: (NSInteger)totalBytesSent i (NSInteger)totalBytesExpectedToSend. Należy ustawić te właściwości w zwrotnego NSURLConnection tak:

- (void)connection:(NSURLConnection *)__unused connection 
    didSendBodyData:(NSInteger)bytesWritten 
totalBytesWritten:(NSInteger)totalBytesWritten 
totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite 
{ 
    [super connection: connection didSendBodyData:bytesWritten totalBytesWritten:totalBytesWritten totalBytesExpectedToWrite:totalBytesExpectedToWrite]; 
    self.totalBytesSent = totalBytesWritten; 
    self.totalBytesExpectedToSend = totalBytesExpectedToSend; 
} 

Twój blok uploadProgress może wyglądać następująco:

……(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) { 
    NSInteger queueTotalExpected = 0; 
    NSInteger queueTotalSent  = 0; 
    for (AFURLConnectionOperation *operation in self.operationQueue) { 
     queueTotalExpected += operation.totalBytesExpectedToSend; 
     queueTotalSent  += operation.totalBytesSent; 
    } 
    self.totalProgress = (double)queueTotalSent/(double)queueTotalExpected; 
}]; 
1
[operation setUploadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) { 
    NSLog(@"Sent %d of %d bytes", totalBytesWritten, totalBytesExpectedToWrite); 
}]; 

Eksploatacja AFHTTPRequestOperation

Powiązane problemy