NSURLConnectionDelegate方法使用NSThread的时候不叫(NSURLConn

2019-10-20 13:33发布

我想在后台线程中运行一个下载,以不阻止iOS上的主UI线程,我所做的就是用创建一个新的线程

[NSThread detachNewThreadSelector:@selector(startDownload) toTarget:downloadObject withObject:nil];

然后将下面的代码在后台线程上运行:

NSURL* urlForCalendar = [NSURL URLWithString:@"http://www.apple.com/"];

urlRequest = [NSURLRequest requestWithURL:urlForCalendar];
urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:NO];

NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
[urlConnection scheduleInRunLoop:runLoop forMode:NSRunLoopCommonModes];
[urlConnection start];

但是,委托回调不会被调用。

编辑:对于任何人谁可能会遇到类似的问题,在未来,后位试图弄清楚为什么它不工作,我没有运行循环。 所以代码的最后3行实际上应该是:

NSRunLoop* runLoop = [NSRunLoop currentRunLoop];   
[urlConnection scheduleInRunLoop:runLoop forMode:NSRunLoopCommonModes];
[urlConnection start];
[runLoop run];

Answer 1:

你不跑你创建线程的运行循环,让您添加到运行循环的连接从来没有维修和你永远不会得到任何回调。

一般来说你只是要处理的主线程上的回调,然后将结果推到一个后台线程,如果需要大量的处理。

你可以做你现在正在做什么,但只要您运行运行循环,妥善整理,一旦下载完成。



文章来源: NSURLConnectionDelegate methods not called when using NSThread