1

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

4

2 回答 2

1

将 web 服务调用移动到viewWillAppearor viewDidAppear,因此在控制器视图出现在屏幕上后调用将启动。

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

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

  1. 如何使用 NSOperations 和 NSOperationQueues
  2. 使用 AFNetworking 轻松建立网络
  3. iOS 快速提示:与 Web 服务交互- 使用 GCD

希望有帮助!

于 2013-09-12T07:01:41.880 回答
0

发生这种情况是因为 web 服务包含大量数据,因此您需要尝试此操作。

使用 [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...

于 2013-09-12T07:01:19.613 回答