app第一次真机🐔运行的时候,都会弹出允许使用网络请求方式(图1),而然开中会发现,即使是选择网络后app依然出现白屏的现在;那是因为用户点击“允许”之前,所有网络请求都是被禁止的,而且在点击“允许”之前,程序已经运行了网络请求,这个时候请求失败的,所以即使允许依然是处于白屏的现象。

那么解决这种现象的方式之一:实时监控网络状态,在网络正常的状态下在执行网络数据的请求访问,在这里个人使用AFNetworking去做这个操作,下面写demo来演示一下。
#import "ViewController.h"
#import <WebKit/WebKit.h>
#import "AFNetworking.h"
@interface ViewController ()<WKNavigationDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
WKWebView * web = [[WKWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height-0)];
web.backgroundColor = [UIColor colorWithRed:254/255.0 green:220/255.0 blue:60/255.0 alpha:1];
web.scrollView.showsHorizontalScrollIndicator = NO;
web.scrollView.showsVerticalScrollIndicator = NO;
web.navigationDelegate = self;
[self.view addSubview:web];
NSURL * url = [NSURL URLWithString:@"http://baidu.com"];
NSURLRequest * urlReq = [NSURLRequest requestWithURL:url];
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
// 在每次网络状态发生改变的时候会执行一次
// 这里可以重复一两次进行关闭和打开移动、Wi-Fi就知道了
if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) {
// 也就是每次恢复有网络的状态下都会执行一遍
// 当然如果觉得这样不太好也可以自己做一些条件限制
NSLog(@"有网路,开始请求数据");
[web loadRequest:urlReq];
}
else
{
//在无网络状态下会自动弹出窗口进行提示
NSLog(@"网络状态不佳");
UIAlertController * alert = [UIAlertController alertControllerWithTitle:@"网络状态不佳" message:nil preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"返回" style:UIAlertActionStyleCancel handler:nil]];
[self presentViewController:alert animated:YES completion:nil];
}
}];
}
网友评论