Pensavo di averlo capito ma non riesco a farlo funzionare. Ho un metodo che viene chiamato su ogni URL in un array. Questo metodo ha un URL di un'immagine che deve essere scaricata in un percorso specifico in una cartella Supporto applicazioni per l'utilizzo offline. Ma forse sto interpretando male i metodi nella libreria di AFNetwork. Il mio metodo è simile al seguente:Scaricare un file/immagine con AFNetworking in iOS?
- (void) downloadImageInBackground:(NSDictionary *)args{
@autoreleasepool {
NSString *photourl = [args objectForKey:@"photoUrl"];
NSString *articleID = [args objectForKey:@"articleID"];
NSString *guideName = [args objectForKey:@"guideName"];
NSNumber *totalNumberOfImages = [args objectForKey:@"totalNumberOfImages"];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:photourl]];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.inputStream = [NSInputStream inputStreamWithURL:[NSURL URLWithString:photourl]];
[operation setShouldExecuteAsBackgroundTaskWithExpirationHandler:^{
DLog(@"PROBLEMS_AF");
}];
DLog(@"URL_PHOTOURL: %@", photourl);
DLog(@"indexSet: %@", operation.hasAcceptableStatusCode);
[operation response];
NSData *data = [args objectForKey:@"data"];
NSString *path;
path = [NSMutableString stringWithFormat:@"%@/Library/Application Support/Guides", NSHomeDirectory()];
path = [path stringByAppendingPathComponent:guideName];
NSString *guidePath = path;
path = [path stringByAppendingPathComponent:photourl];
if ([[NSFileManager defaultManager] fileExistsAtPath:guidePath]){
[[NSFileManager defaultManager] createFileAtPath:path
contents:data
attributes:nil];
}
DLog(@"path: %@", path);
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];
[operation start];
DLog(@"isExecuting: %d",[operation isExecuting]);
DLog(@"IS_FINISHED: %d",[operation isFinished]);
}
}
PhotoURL è il link diretto all'immagine che voglio scaricare.
Poiché questo metodo viene chiamato per tutte le immagini, tutti i registri sono chiamati più volte e sembrano essere corretti.
Mi hai puntato dritto . Avevo dei dubbi su quello che stavo facendo, grazie mille. –
aggiuntivo: se si hanno più richieste contemporaneamente, considerare l'uso di un 'NSOperationQueue' (tutte le classi AFRequestOperation sono conformi alla codifica) e lasciare che la coda gestisca le operazioni. questo potrebbe rivelarsi utile e non genererà 100 richieste allo stesso tempo. – choise
Quante richieste di solito un'app può gestire senza implementare NSOperationQueue ?, non saranno mai più di 50 richieste, è sufficiente che valga la pena implementarle? –