0

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

任何帮助将不胜感激

4

3 回答 3

0

这是一种可能的方式,虽然不是通过 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);
于 2012-10-16T01:21:57.650 回答
0

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

于 2012-10-17T08:12:30.333 回答
0

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

于 2012-10-17T07:04:04.467 回答