无法使用Internet时脱机UIWebView

问题描述 投票:1回答:1

我有一个UIWebView。当可以访问互联网时,我希望它加载实际的网页,而当没有互联网时,我希望它加载一个保存的html完整网站文件。我用本地文件实现了一个测试webView,它运行良好。代码是这样的:

[myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"My Website" ofType:@"html"]isDirectory:NO]]];

当然,我合成了webview并在.h中也进行了构建。我还通过普通的webview在线访问网站,除了在viewDidLoad中使用上面的代码而不是上面的代码之外,这完全相同:

NSString *fullURL = @"http://www.mywebsite.com";
NSURL *url = [NSURL URLWithString:fullURL];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[myWebView loadRequest:requestObj];

但是,当我尝试使网络视图在没有互联网可用时加载html,而在互联网可用时加载网站时,它可以正常工作,但是离线网站停止支持除主页以外的任何内容,并丢失了所有照片(它们在如上所述的单独视图,只是不在演示版脱机在线视图中)。我使用了以下代码:

NSURL *scriptUrl = [NSURL URLWithString:@"http://www.mywebsite.com"];
NSData *data = [NSData dataWithContentsOfURL:scriptUrl];
if (data) {
    NSLog(@"Device is connected to the internet");
    NSString *fullURL = @"http://www.mywebsite.com";
    NSURL *url = [NSURL URLWithString:fullURL];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [myWebView loadRequest:requestObj];

} else {
    NSLog(@"Device is not connected to the internet");
    [myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"My Website" ofType:@"html"]isDirectory:NO]]];
}

无奈之下,我尝试在每个原始视图中添加一个导航栏,以便在脱机视图中可以单击“在线”按钮并选择到联机视图,反之亦然。这很不幸地失败了:离线视图(最初的视图)运行良好,但是当我按下“在线”按钮时,出现以下错误:

***第一个调用堆栈:(0x321cb3e7 0x3a065963 0x321cb0d5 0x32a397d9 0x32a35543 0x321518a5 0x34176e7d 0x341766ff 0x3406f0790x33ff9451 0x34085357 0x340c6cd9 0x340c5fab 0x341e7da3 0x340c50870x340c5111 0x340c5087 0x340c503b 0x340c5015 0x340c48cb 0x340c4db90x33fed5f9 0x33fda8e1 0x33fda1ef 0x35cce5f7 0x35cce227 0x321a03e70x321a038b 0x3219f20f 0x3211223d 0x321120c9 0x35ccd33b 0x3402e2b90x8194d 0x3a492b20)libc ++ abi.dylib:终止调用例外

我曾尝试使在线视图成为第一个视图,而离线视图则成为第二个视图,您可以单击栏按钮进入该视图,而离线视图则停止工作。似乎初始视图将加载,无论哪个加载,但第二视图都不加载。也许我不正确地使用了条形按钮项目,尽管我对情节提要很有经验,并且在项目的其余部分中有许多条形按钮序列。是的,在实现上一个提到的条形按钮解决方案时,我在最初失败后确实将Web视图的名称更改为不同的名称(myWebView和myOfflineWebView),因为我认为也许有两个具有相同名称的不同uiWebViews,尽管不同viewControllers,可能是问题所在,但这没有帮助。

感谢任何反馈。可能检查互联网可用性的代码不起作用,因为它是为OSX设计的。我找到了它here。我不想让我的项目陷入大型库(例如经常提到的this库)的困境,因为它已经准备好了很多库,而且运行起来有点慢。我无法使用常规的Apple Reachability示例项目,因为我正在使用ARC。我可以对其进行重构,但是我没有太多时间,并且宁愿使用简单的解决方案,即使它不是100%完美或优雅的。谢谢!

html ios caching uiwebview segue
1个回答
2
投票

因此,关于互联网可用性,您将需要使用this reachability library。另外,由于保存的html具有绝对URL,因此可能未加载图像和链接:http://foo.com/image.jpg由于没有连接而无法加载。

© www.soinside.com 2019 - 2024. All rights reserved.