我有一个 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 加载 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]]];
}
无奈之下,我尝试在每个原始视图中添加一个导航栏,以便在离线视图中单击“在线”按钮并转到在线视图,反之亦然。这惨遭失败:离线视图(这是最初的视图)工作正常,但是当我按下“在线”按钮时,出现以下错误:
*** First throw call stack: (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 制作的。我在这里找到了。我不想让我的项目陷入大型库(比如经常提到的这个),因为它有很多库都准备好了,而且有点慢。我无法使用通常的 Apple Reachability 示例项目,因为我使用的是 ARC。我可以重构它,但我没有太多时间,我更喜欢更简单的解决方案,即使它不是 100% 完美或优雅。谢谢!