我正在开发一款拥有2个VC,mapVC(使用谷歌地图SDK)和webVC的iOS应用。在mapVC上选择注释,然后转换到webVC并打开相应的网页。 但是webView的viewDidLoad中的loadRequest方法太慢而无法等待。
所以我想在mapView上选择一个pin时预加载web数据,然后使用loadData方法将预加载的数据移交给webVC。
但是webVC只显示文本,没有图像没有CSS。 我该怎么做才能预加载完整的HTML / CSS /图像? 任何建议表示赞赏提前谢谢。
我目前的源代码如下。
// --- mapViewController ---
- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker
{
NSURL *url = [NSURL URLWithString:@"(target URL)"];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
receivedData = [NSMutableData dataWithCapacity:0];
NSURLConnection *urlConnection;
urlConnection = [NSURLConnection connectionWithRequest:urlRequest delegate:self];
if (!urlConnection) {
receivedData = nil;
}
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[receivedData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[receivedData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
receivedData = nil;
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showWeb"]) {
WebViewController *webViewController = [segue destinationViewController];
webViewController.preloadedData = receivedData;
}
}
// --- webViewController ---
- (void)viewDidLoad
{
[super viewDidLoad];
self.webView.delegate = self;
[self.webView loadData:self.preloadedData
MIMEType:@"text/html"
textEncodingName:@"utf-8"
baseURL:nil];
}
答案 0 :(得分:1)
您只加载了HTML代码,但没有加载内容(例如media / images / css)。您必须预先解析响应并手动预加载其余内容。
NSURLConnection不会在响应中查找URL,也不会自动加载
答案 1 :(得分:1)
看看ASIWebPageRequest。它允许下载整个网页,包括所有资源。