首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSThread时未调用NSURLConnectionDelegate方法

使用NSThread时未调用NSURLConnectionDelegate方法
EN

Stack Overflow用户
提问于 2014-07-30 03:43:07
回答 1查看 161关注 0票数 1

我尝试在后台线程中运行下载,以免阻塞iOS上的主UI线程,我所做的是使用以下命令创建一个新线程

代码语言:javascript
复制
[NSThread detachNewThreadSelector:@selector(startDownload) toTarget:downloadObject withObject:nil];

然后,以下代码在后台线程上运行:

代码语言:javascript
复制
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行代码实际上应该是:

代码语言:javascript
复制
NSRunLoop* runLoop = [NSRunLoop currentRunLoop];   
[urlConnection scheduleInRunLoop:runLoop forMode:NSRunLoopCommonModes];
[urlConnection start];
[runLoop run];
EN

回答 1

Stack Overflow用户

发布于 2014-07-30 04:13:05

您不会运行您创建的线程的run循环,因此您添加到run循环的连接永远不会得到服务,也不会得到任何回调。

通常,您只需要处理主线程上的回调,然后如果需要大量处理,则将结果推送到后台线程。

你可以做你现在正在做的事情,只要你运行run循环,并在下载完成后进行适当的整理。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25023644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档