Iphone 在单独的NSThread上实现异步下载(NSURLConnection)?

Iphone 在单独的NSThread上实现异步下载(NSURLConnection)?,iphone,nsurlconnection,Iphone,Nsurlconnection,这听起来可能很奇怪,但请耐心听我说。我有6-7个API调用,它们逐个向服务器发出请求。我想在一个单独的线程中实现这些调用。但在执行此操作时,即使在管理单独的nsrunlop之后,也不会调用任何委托方法(NSURLConnection) ([[NSRunLoop currentRunLoop]运行模式:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];) 是否有人能为我提供替代方法,对现有功能进行相同或任何更正???改用。它的使用比NS

这听起来可能很奇怪,但请耐心听我说。我有6-7个API调用,它们逐个向服务器发出请求。我想在一个单独的线程中实现这些调用。但在执行此操作时,即使在管理单独的nsrunlop之后,也不会调用任何委托方法(NSURLConnection) ([[NSRunLoop currentRunLoop]运行模式:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];)


是否有人能为我提供替代方法,对现有功能进行相同或任何更正???

改用。它的使用比NSURLConnection要容易得多。谷歌很快就抛出了这样一个问题:他正在使用字典来管理多个请求,为每个NSURLConnection使用一个单独的线程,这已经是多线程的了,这是一个坏主意。它只是毫无意义地使用系统资源,挫败了NSURLConnections以最佳方式管理连接的尝试。但是,如果您没有收到代理消息,那么它确实起作用,因为您做错了。与其寻找替代方法,不如尝试找出运行循环问题的根源。

我正在使用AsittpRequest执行类似的操作。通过以下代码更改downloadAllIcons方法以满足您的需求

  [NSThread detachNewThreadSelector:@selector(downloadAllIcons:) toTarget:self withObject:xmlData];

 -(void) downloadAllIcons:(NSData *)_xmlData
 {

 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  NSArray *IconList= PerformXMLXPathQuery(_xmlData,@"//icon");
 [[NSUserDefaults standardUserDefaults] setObject:IconList forKey:@"IconList"];


 for (int i=0; i<[IconList count]; i++) {

    if ([[NSUserDefaults standardUserDefaults] objectForKey:[[IconList objectAtIndex:i] objectForKey:@"nodeContent"]]==nil) {
        NSData * responseData=[self downloadProccessedImage:[[IconList objectAtIndex:i] objectForKey:@"nodeContent"]];


        if(responseData)
            [[NSUserDefaults standardUserDefaults] setObject:responseData forKey:[[IconList objectAtIndex:i] objectForKey:@"nodeContent"]];
        //NSLog(@"%@",[[IconList objectAtIndex:i] objectForKey:@"nodeContent"]);
    }



}
[pool release];



 }


 -(id) downloadProccessedImage:(NSString *)_URL
  {


NSData *response=nil;
NSURL *url = [NSURL URLWithString:_URL];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setTimeOutSeconds:60];
[ASIHTTPRequest setShouldThrottleBandwidthForWWAN:YES];
[request startSynchronous];
NSError *error = [request error];
if (!error)
{
    response = [request responseData];
}       
return response;

    }
[NSThread detachNewThreadSelector:@selector(downloadAllIcons:)to target:self with object:xmlData];
-(无效)下载Allicons:(NSData*)\u xmlData
{
NSAutoreleasePool*池=[[NSAutoreleasePool alloc]init];
NSArray*IconList=PerformXMLXPathQuery(_xmlData,@”//icon);
[[NSUserDefaults standardUserDefaults]setObject:IconList forKey:@“IconList”];

对于(int i=0;iHi JFoulkes,我遇到的障碍与多个NSURLConnections无关。相反,它是关于在一个单独的NSThread中管理连接。正如我前面提到的,请求是按顺序一个接一个地进行的。我在谷歌上搜索了它,找到了类似NSOperation的东西,但它没有给我确切的方法?