ASINetworkQueue를 사용하여 요청을 대기열에 넣습니다. 12 개의 요청을 추가하는 반면, 결국에는 24 번 다운로드하여 각 요청을 두 번 다운로드합니까? 왜 그런가요? 어떻게 그것을 막을 수 있습니까?Objective-C - ASINetworkQueue가 추가 된 요청을 두 번 실행합니까?
대기열에서 전화를 걸기 전에 대기열에 추가 된 요청 수 (예 : (NSLog(@"%@",[[self queue] operations]);)
)를 확인하고 12 개의 ASIHTTPRequests를 표시합니다.
수정 : 내 코드가 추가되었습니다. 정확한 진도가 켜지지 않았습니다.
코드 :
- (void)setupQueue {
DLog(@"setupQueue running");
// Stop anything already in the queue before removing it
[[self queue] cancelAllOperations];
// Creating a new queue each time we use it means we don't have to worry about clearing delegates or resetting progress tracking
[self setQueue:[ASINetworkQueue queue]];
[[self queue] setDelegate:self];
[[self queue] setRequestDidStartSelector:@selector(requestStarted:)];
[[self queue] setRequestDidFinishSelector:@selector(requestFinished:)];
[[self queue] setRequestDidFailSelector:@selector(requestFailed:)];
[[self queue] setQueueDidFinishSelector:@selector(queueFinished:)];
}
- (NSArray *)parseMapsThumbsUrls {
DLog(@"parseMapsThumbsUrls running");
NSDictionary *results = [[self officesJSON] JSONValue];
NSArray *offices = [results objectForKey:@"offices"];
NSMutableArray *mapsThumbsUrls = [[[NSMutableArray alloc] init] autorelease];
for (NSDictionary *office in offices) {
NSString *mapThumbImageString = [NSString stringWithFormat:@"http://maps.google.com/maps/api/staticmap?zoom=11&markers=color:0xFF7300|%@,%@&size=70x70&sensor=true", [office objectForKey:@"latitude"], [office objectForKey:@"longitude"]];
// Make the string HTML-compatible
NSString *url = [mapThumbImageString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[mapsThumbsUrls addObject:url];
}
return mapsThumbsUrls; // returns an array of 6 urls
}
- (void)downloadMapsThumbs {
DLog(@"downloadMapsThumbs running");
[self setupQueue];
NSArray *mapsThumbsUrls = [self parseMapsThumbsUrls];
for (NSString *mapThumbUrl in mapsThumbsUrls) {
NSURL *url = [NSURL URLWithString:mapThumbUrl];
ASIHTTPRequest *mapThumbRequest = [ASIHTTPRequest requestWithURL:url];
[mapThumbRequest setTag:2];
[mapThumbRequest setDelegate:self];
[[self queue] addOperation:mapThumbRequest];
}
}
- (void)download {
[self downloadMapsThumbs];
DLog(@"%@",[[self queue] operations]);
[[self queue] go];
}
- (void)requestFinished:(ASIHTTPRequest *)request {
if (request.tag == 2) { // Process thumbs
DLog(@"%@",[[request originalURL] description]);
// Use when fetching binary data
NSData *responseData = [request responseData];
[[self mapThumbs] addObject:responseData];
}
}
몇 가지 코드를 보여주십시오. – VenoMKO
관련 코드를 추가했습니다. 감사. –