gpt4 book ai didi

ios - 使用 NSThread 时未调用 NSURLConnectionDelegate 方法

转载 作者:行者123 更新时间:2023-12-01 18:58:12 25 4
gpt4 key购买 nike

我正在尝试在后台线程中运行下载,以免阻塞 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];

但是,永远不会调用委托(delegate)回调。

编辑:
对于将来可能遇到类似问题的任何人,经过一番尝试弄清楚它为什么不起作用之后,我并没有运行循环。所以最后 3 行代码实际上应该是:
NSRunLoop* runLoop = [NSRunLoop currentRunLoop];   
[urlConnection scheduleInRunLoop:runLoop forMode:NSRunLoopCommonModes];
[urlConnection start];
[runLoop run];

最佳答案

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

通常,您只想处理主线程上的回调,然后在需要繁重的处理时将结果推送到后台线程。

只要您运行运行循环并在下载完成后正确整理,您就可以做您当前正在做的事情。

关于ios - 使用 NSThread 时未调用 NSURLConnectionDelegate 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25023644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com