2009-04-26 3 views
0

У меня есть приложение iPhone на базе UITabBar с 4 различными UIWebViews под каждой вкладкой. В настоящий момент все UIWebViews загружаются при запуске, и это занимает слишком много времени.Задержка загрузки UIWebView в приложении UITabBar

Сначала я хотел бы загрузить UIWebView вкладки по умолчанию, а затем загрузить остальные в фоновом режиме. Каков наилучший способ сделать это?

У меня есть раздельное ViewControllers установленного для каждой вкладки и иметь это в каждом .m файла:

- (void)viewDidLoad { 

NSString *urlAddress2 = @"http://google.com "; 

//Create a URL object. 
NSURL *url2 = [NSURL URLWithString:urlAddress2]; 

//URL Requst Object 
NSURLRequest *requestObj2 = [NSURLRequest requestWithURL:url2]; 

//Load the request in the UIWebView. 
[webView2 loadRequest:requestObj2]; 

} 

Есть простой способ рассказать другую 3 вкладки, чтобы начать загрузку через несколько секунд после запуска вместо при запуске? Будет ли это хорошей идеей?

Большое спасибо!

ответ

1

Я обошел эту проблему, внедряя слой модели, через который проходят все запросы. Запросы помещаются в очередь и обслуживаются в порядке приоритета, как правило, по одному за раз. Я добавил специальные методы, чтобы позволить контроллеру эскалировать приоритет запросов, чтобы, при необходимости, сразу два или несколько запросов были активны. Когда запрос завершается, он предупреждает делегата (контроллера WebView), что данные готовы к загрузке.

В зависимости от того, как вы хотите настроить вещи, вы можете поместить обратный вызов в «webViewDidFinishLoad» (или, возможно, shouldStartLoadWithRequest или webViewDidStartLoad), который запускает слой модели для удаления из очереди и обслуживания следующего запроса. Для безопасности вам также понадобится тайм-аут в слое модели.

Примечание: вам также необходимо добавить какой-то пользовательский код в shouldStartLoadWithRequest, чтобы различать клики и уровень модели, вставляя данные. I.e. вам нужно вернуть NO или YES в зависимости от типа navigationType.

0

Вы можете использовать NSTimer или выполнить загрузку в viewDidAppear или аналогичном.

1

Если вы используете ASIHTTPRequest вместо NSURLRequest, вы можете отправить synchronous request по первому URL. По завершении этого запроса вы можете асинхронно запускать три других запроса URL (т. Е. В фоновом режиме).

0

Использовать viewDidAppear. Это будет отправлено контроллеру после того, как представление полностью появится и анимация закончится.

Смежные вопросы