我有一个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];

但是,当我尝试使Webview在没有Internet可用时加载html,而在Internet可用时加载网站时,它可以正常工作,但是离线站点停止支持除主页以外的任何内容,并丢失了所有照片(它们在单独的页面上都可以正常工作)如上所述,只是不在演示版脱机在线视图中)。我使用以下代码:
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 0x3406f079
0x33ff9451 0x34085357 0x340c6cd9 0x340c5fab 0x341e7da3 0x340c5087
0x340c5111 0x340c5087 0x340c503b 0x340c5015 0x340c48cb 0x340c4db9
0x33fed5f9 0x33fda8e1 0x33fda1ef 0x35cce5f7 0x35cce227 0x321a03e7
0x321a038b 0x3219f20f 0x3211223d 0x321120c9 0x35ccd33b 0x3402e2b9
0x8194d 0x3a492b20)libc ++ abi.dylib:终止调用
例外

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

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

最佳答案

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

关于html - 互联网不可用时脱机UIWebView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17688894/

10-13 09:27