Iphone NSURL与NSOperationqueu的连接问题

Iphone NSURL与NSOperationqueu的连接问题,iphone,nsurlconnection,nsoperationqueue,Iphone,Nsurlconnection,Nsoperationqueue,嗨,我正在尝试创建一个NSOperaion队列来下载一堆PDF文件。但它不起作用。NSURLConnection不会调用委托方法,因为我将它们放在NSOperation队列中。。。。有其他选择或解决方案吗 - (void) loadData { NSOperationQueue *queue = [NSOperationQueue new]; NSInvocationOperation *operation; for(int i=0;i<[self.pdfArray count];i

嗨,我正在尝试创建一个NSOperaion队列来下载一堆PDF文件。但它不起作用。NSURLConnection不会调用委托方法,因为我将它们放在NSOperation队列中。。。。有其他选择或解决方案吗

- (void) loadData {
 NSOperationQueue *queue = [NSOperationQueue new];
 NSInvocationOperation *operation;
 for(int i=0;i<[self.pdfArray count];i++){
  NSString *url = [NSString stringWithFormat:@"http://www.somelink.com/%@.pdf",[self.pdfArray objectAtIndex:i]];
  operation = [[NSInvocationOperation alloc] initWithTarget:self 
               selector:@selector(loadDataWithOperation:) 
                 object:url];

  [queue addOperation:operation];
  [operation release];
 }
}

- (void) loadDataWithOperation:(NSString *) url{

 // Create the request.

    NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url]
            cachePolicy:NSURLRequestUseProtocolCachePolicy
            timeoutInterval:60.0];

    NSURLConnection  *theDownload = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self startImmediately:YES];
}
-(无效)加载数据{
NSOperationQueue*队列=[NSOperationQueue new];
NSInvocationOperation*操作;

对于(int i=0;i我看不出代码有什么问题,但可能是线程问题。NSOperationQueue通过Grand Central Dispatch创建一个线程来运行该操作。如果NSURLConnection也尝试创建线程,则可能会导致问题-我不确定线程是否可以是子线程的子线程


您可以执行sendSynchronousRequest:以便它保留在您在NSOperationQueue中创建的线程中,并查看是否工作得更好。

我看不出代码有什么问题,但可能是线程问题。NSOperationQueue通过Grand Central Dispatch创建一个线程来运行该操作。如果NSURLConnection尝试创建一个线程可能会导致问题-我不确定一个线程是否可以是子线程的子线程


您可以执行sendSynchronousRequest:以便它保留在您在NSOperationQueue中创建的线程中,并查看是否效果更好。

请看这里,这是一个对我很有帮助的教程,因此我将其添加到书签中


看看这里,这是一个对我很有帮助的教程,所以我将其添加到书签中


NSURLConnection需要一个正在运行的NSRunLoop才能正常工作。如果在NSRunLoop未运行的线程上调用NSURLConnection方法,NSURLConnection将永远不会运行。NSOperationQueue创建的工作线程没有运行其NSRunLoop。您也不能保证在NSURLConnection运行时线程仍然存在收到来自服务器的响应


可以从后台线程调用NSURLConnection方法,但它必须是一个可以保证其生存期的线程,并且需要运行其nsrunlop。

NSURLConnection需要一个正在运行的nsrunlop才能运行。如果在nsrunlop未运行的线程上调用NSURLConnection方法,则NSURLConnection将永远不会运行运行。NSOperationQueue创建的工作线程没有运行其nsrunlops。当NSURLConnection从服务器收到响应时,您也不能保证该线程仍然存在


可以从后台线程调用NSURLConnection方法,但它必须是一个可以保证其生存期的线程,并且需要运行其nsrunlop。

是否在loadDataWithOperation:method中设置了断点或调试输出,以验证它是否未被调用?是的,被调用了…唯一的问题是当我将其添加到nsoperationqueue中它无法正常工作是否正确创建了下载?(您没有从初始化返回nil。)您不必这样做,但调用
[下载开始]
有什么区别吗?相同的输出…注意已更改是否在loadDataWithOperation:method中放置断点或调试输出,以验证未调用它?是的,已调用…唯一的问题是,当我将其添加到nsoperationqueue中时,它不工作。是否正确创建了下载?(您没有从init返回nil。)您不必这样做,但是调用
[theDownload start]
会有什么不同吗?相同的输出…注意到已更改