所以我有一个标签式iOS应用程序,应用程序中的两个视图控制器都有webViews。没有其他的。打开这些视图后,他们会调用我在viewDidLoad方法中编码的NSURLRequest(众所周知)。非常典型,基本,简单的代码。
我想要做但却无法弄清楚的是,如何在应用启动时调用和完成这些请求,而不是在第一次查看视图控制器时触发。加载只需要很长时间。
我对线程和块没有很多经验,所以任何建议都会有所帮助!我知道需要在主线程/队列上调用所有UI内容。我已尝试使用另一个线程(在视图控制器2中注释掉),因此对我已经拥有的内容的任何进一步解释也会很好。
VC 1
- (void)viewDidLoad
{
[super viewDidLoad];
NSURL *url = [NSURL URLWithString:@"https://soundcloud.com/vanguardsf"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_music loadRequest:request];
}
VC 2
- (void)viewDidLoad
{
[super viewDidLoad];
CGRect screen = [[UIScreen mainScreen]applicationFrame];
_webView = [[UIWebView alloc]initWithFrame:screen];
_webView.delegate = self;
[self.view addSubview:_webView];
NSString *netGym = @"http://www.netgym.com/login.asp";
NSURL *url = [NSURL URLWithString:netGym];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_webView loadRequest:request];
NSLog(@"%@", request );
// if (!requestQueue) {
// requestQueue = dispatch_queue_create("come.requestNetgym.load", NULL);
// }
// dispatch_queue_t requestQueue = dispatch_queue_create("come.requestNetgym.load", NULL);
// dispatch_async(requestQueue, ^{
// NSString *netGym = @"http://www.netgym.com/login.asp";
// NSURL *url = [NSURL URLWithString:netGym];
// NSURLRequest *request = [NSURLRequest requestWithURL:url];
// [_webView loadRequest:request];
// NSLog(@"%@", request );
// });
}
答案 0 :(得分:0)
您不必使用GDC发送asynchrounus NSURLRequests - 如果您没有故意同步使用它们,它们就是异步的。
您可以使用此方法启动请求: https://developer.apple.com/library/ios/documentation/uikit/reference/uiapplicationdelegate_protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:willFinishLaunchingWithOptions: 当您可以在启动完成后执行代码时,这是应用程序中的第一个位置。你会节省一些时间(我想的很少 - 这看起来像一个简单的应用程序)。
我认为更好的解决方案是缓存下载的网站数据。在这种情况下,您将在第一次输入应用程序时下载数据,第二次您将显示下载的内容。在后台您将检查网站是否已更改。如果是这样您更新内容。