pipe理两个NSURLConnection
我想从两个不同的kml文件做两个asynchronous请求,所以我先设置了两个请求:
NSString *server1URL = [NSString stringWithFormat:...]; NSMutableURLRequest *firstRequest =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:server1URL]]; [firstRequest setHTTPMethod:@"GET"]; NSURLConnection *AConnection = [NSURLConnection connectionWithRequest:firstRequest delegate:self]; NSString *server2URL = [NSString stringWithFormat:...]; NSMutableURLRequest *secondRequest =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:server2URL]]; [secondRequest setHTTPMethod:@"GET"]; NSURLConnection *BConnection = [NSURLConnection connectionWithRequest:secondRequest delegate:self];
然后我启动NSMutableData
我将使用:
AResponseData = [[NSMutableData alloc] init]; BResponseData = [[NSMutableData alloc] init];
然后,我提到这个post,并做到这一点:
connectionToInfoMapping = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); CFDictionaryAddValue(connectionToInfoMapping, AConnection, [NSMutableDictionary dictionaryWithObject:AResponseData forKey:@"receivedData"]); CFDictionaryAddValue(connectionToInfoMapping, BConnection, [NSMutableDictionary dictionaryWithObject:BResponseData forKey:@"receivedData"]);
好的,那么有代表:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { const NSMutableDictionary *connectionInfo = CFDictionaryGetValue(connectionToInfoMapping, connection); [[connectionInfo objectForKey:@"receivedData"] appendData:data]; }
因此,我可以将数据附加到与连接匹配的正确的NSMutableData。
现在在- (void)connectionDidFinishLoading:(NSURLConnection *)connection
,我想要“如果完成,做到这一点,如果B完成,做到这一点”,我的问题是,我该怎么做?
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ if( [connection isEqual: AConnection] ){ // do connection A stuff } else if( [connection isEqual: BConnection] ){ // do connection B stuff } }
使用GCD和sendSynchronousRequest:请求,它们将在后台运行。
例:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ NSURLRequest *request = [NSURLRequest requestWithURL:url1]; NSURLResponse *response; NSError *error; NSData *data1 = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; // do something with the data }); dispatch_async(queue, ^{ NSURLRequest *request = [NSURLRequest requestWithURL:url2]; NSURLResponse *response; NSError *error; NSData *data2 = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; // do something with the data });
如何为每个连接分配标签,并通过if / else或connectionDidFinishLoading中的开关检查标签?