【发布时间】:2015-03-03 21:52:51
【问题描述】:
我有一个名为WebScreenViewController 的UIViewController 类,它有一个UIWebView。这是类的实现文件:
@implementation WebScreenViewController
@synthesize urlString;
- (void)viewDidLoad
{
[super viewDidLoad];
self.webView.delegate = self;
// Do any additional setup after loading the view.
[self gotoUrl:self.urlString];
//[self gotoUrl:@"http://www.google.com"];
}
#pragma mark - UIWebView Delegates
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL* url = [request URL];
NSString* urlStr = url.absoluteString;
NSLog(@"shouldStartLoadWithRequest. URLStr = %@", urlStr);
return YES;
}
-(void)webViewDidStartLoad:(UIWebView *)webView
{
NSLog(@"webViewDidStartLoad");
}
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString* html = [webView stringByEvaluatingJavaScriptFromString:@"document.body"];
NSLog(@"webViewDidFinishLoad: HTML string = %@", html);
}
-(void) webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
NSLog(@"didFailLoadWithError. ERROR: %@", error);
}
#pragma mark - Member Methods
-(void)gotoUrl:(NSString*)urlStr
{
NSLog(@"Calling website %@ in UIWebView...", urlStr);
NSURL* url = [NSURL URLWithString:urlStr];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:urlRequest];
}
@end
上面的代码在我的一个测试设备上运行良好,但在另一个测试设备上却不行。它在我的最新 iOS 8.1.2 的 iPod Touch 上运行。但它不适用于装有 iOS 7.0 的 iPad3。当我在 iPad3 上运行它时,它会调用 gotoUrl: 方法并显示日志“Calling website %@ in UIWebView...”。就是这样。我不再收到代表的日志。为了检查互联网连接,我尝试在同一台设备上使用 Safari,它可以正常工作。
【问题讨论】:
-
您是否检查了 [gotoUrl:] 中的 self.webview 是否为空?
-
在设置委托之前首先检查它是否被初始化。如果它为空,那么首先初始化它然后设置它的委托。
-
好吧,就像我说的,上面的代码在我的 iPod 中使用时可以正常工作。意思是,所有的 NSLog 都正确打印出来。问题是如果我在我的 iPad 上运行它,它将无法工作。所以我不知道它有什么问题,它无法在具有不同操作系统的不同设备上工作。
标签: ios objective-c iphone uiwebview uiwebviewdelegate