我尝试在后台线程中运行下载,以免阻塞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];发布于 2014-07-30 04:13:05
您不会运行您创建的线程的run循环,因此您添加到run循环的连接永远不会得到服务,也不会得到任何回调。
通常,您只需要处理主线程上的回调,然后如果需要大量处理,则将结果推送到后台线程。
你可以做你现在正在做的事情,只要你运行run循环,并在下载完成后进行适当的整理。
https://stackoverflow.com/questions/25023644
复制相似问题