Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何使用NSOperationQueue或performSelectorInBackground运行异步服务调用_Objective C_Nsurlconnection_Background Process - Fatal编程技术网

Objective c 如何使用NSOperationQueue或performSelectorInBackground运行异步服务调用

Objective c 如何使用NSOperationQueue或performSelectorInBackground运行异步服务调用,objective-c,nsurlconnection,background-process,Objective C,Nsurlconnection,Background Process,我正在使用NSURLConnection异步调用从服务器加载数据。使用performSelectorInBackground调用服务方法时,该方法被调用,但NSURLConnection不提供任何响应。我使用异步调用,因为我必须先验证身份验证。每当我尝试在主线程上调用服务时,它会给我正确的数据,但UI会冻结。 1) 如何使用performSelectorInBackground进行异步调用 异步加载数据有什么不对 任何帮助都将不胜感激这里有一种可能的方法,尽管不是通过NSURLConnectio

我正在使用NSURLConnection异步调用从服务器加载数据。使用performSelectorInBackground调用服务方法时,该方法被调用,但NSURLConnection不提供任何响应。我使用异步调用,因为我必须先验证身份验证。每当我尝试在主线程上调用服务时,它会给我正确的数据,但UI会冻结。 1) 如何使用performSelectorInBackground进行异步调用 异步加载数据有什么不对


任何帮助都将不胜感激

这里有一种可能的方法,尽管不是通过NSURLConnection,但它不会阻止:

NSURL *xmlURL = [NSURL URLWithString:URL];

if (self.xmlParser != nil)
{
    [self.xmlParser abortParsing];
    self.xmlParser = nil;
}

dispatch_queue_t loadQueue1 = dispatch_queue_create("loadQueue1", NULL);

// Use another thread to avoid blocking main thread

dispatch_async(loadQueue1,^{

self.xmlParser = [[[NSXMLParser alloc] initWithContentsOfURL:xmlURL] autorelease];

// -------------------------------------------------------------------
[self.xmlParser setDelegate:self];


dispatch_async(dispatch_get_main_queue(),^{
if (self.xmlParser != nil)
{
    [self.xmlParser  parse];
}

    });


});

dispatch_release(loadQueue1);

好的,在调试代码之后,我得到了错误。这不是异步调用,而是接收到巨大响应后的更新方法冻结了我的UI。另外,我用于打印数据的NSLog也导致了问题。

如果您将
NSURLConnection
与异步API一起使用,您不需要使用
performSelectorInBackground
。您从主线程调用它,并设置了一个委托,当数据到来或发生另一个事件时将调用该委托,而不会阻塞主线程。

谢谢casillic,但这样我想我无法验证证书身份验证。我想要异步调用,但不冻结UI。