在viewDidLoad中调用Web服务导致屏幕挂起iOS

时间:2013-09-12 06:56:53

标签: ios uinavigationcontroller hang viewdidload

单击我在其他屏幕上导航的按钮的一个屏幕,我正在正常导航但屏幕正在挂起,直到我导航的屏幕获取Web服务响应 (在viewDidLoad中我正在调用一个Web服务) 如何解决这个问题 感谢

2 个答案:

答案 0 :(得分:1)

将网络服务电话转移至viewWillAppearviewDidAppear,以便在屏幕上显示控制器视图后启动通话。

理想情况下,您应该在后台执行Web服务调用,即不在主线程上执行。使用NSOperationNSOperationQueueAFNetworkingGrand Central Dispatch。然后,您可以在viewDidLoad本身发起呼叫。

以下是一些可以帮助您入门的链接。

  1. How To Use NSOperations and NSOperationQueues
  2. Networking Made Easy With AFNetworking
  3. iOS Quick Tip: Interacting with Web Services - 使用GCD
  4. 希望有所帮助!

答案 1 :(得分:0)

这是因为webservice包含大量数据,你需要尝试这个。

使用[NSURLConnection sendAsynchronousRequest:queue:completionHandler:加载图像,然后使用NSCache阻止一次又一次地下载相同的图像。

正如许多开发人员所建议的那样,去SDWebimage,它确实包含了下载图像文件的上述策略。你可以加载你想要的任意数量的图像,并且根据代码的作者不会多次下载相同的URL

上的示例
[NSURLConnection sendAsynchronousRequest:queue:completionHandler:

NSURL *url = [NSURL URLWithString:@"your_URL"];
NSURLRequest *myUrlRequest = [NSURLRequest requestWithURL:url];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest: myUrlRequest queue: queue completionHandler: ^ (NSURLResponse *response, NSData *data, NSError *error)
{

    if ([data length] > 0 && error == nil)
        //doSomething With The data

    else if (error != nil && error.code == ERROR_CODE_TIMEOUT)
        //time out error

    else if (error != nil)
        //download error
}];

然后使用NSCache ...