NSURLConnection委托方法未执行

时间:2016-08-04 19:24:22

标签: ios objective-c background-task nsurlconnectiondelegate

NSURL *httpsURL = [NSURL URLWithString:@"https://example.com"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:httpsURL cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:5.0f];
self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
[self.connection start];

while(something) {
    // some code
}

在上面的代码中,代理(例如:willSendRequestForAuthenticationChallenge)在while循环完成之前不会执行。这种行为的原因是什么以及如何克服这个问题?我希望代表在后台执行。我怎样才能实现它?

提前致谢。

1 个答案:

答案 0 :(得分:1)

不推荐使用NSURLConnection。使用NSURLSession。执行此操作时,将会话的delegateQueue设置为后台队列。这样,您的委托消息就可以到达。现在,你阻止他们到达,因为他们想要到达主线程而他们不能。

然而,正如dgatwood所说,如果你正在做一些耗时的事情,可以阻止主线程,那也是错误的。如果你尝试那种东西,你的应用程序将被WatchDog进程杀死。