我有一个UIViewController
的独立UIWebView
。我需要检查某个网址是否被点击,如果是,请在UIViewController
内显示新的UINavigationController
。
这是我的代码:
-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = request.URL;
NSString *urlString = url.absoluteString;
//Check if special link
if ( [ urlString isEqualToString: @"http://www.mysite.com/store" ] ) {
//Here present the new view controller
StoreViewController *controller = [[StoreViewController alloc] init];
[self presentViewController:controller animated:YES completion: nil];
return NO;
}
return YES;
}
但是,当我运行应用程序时,我收到以下错误:
WebKit在方法中抛出了未捕获的异常 web视图:decidePolicyForNavigationAction:请求:帧:decisionListener: 委托:
< 'NSInvalidArgumentException' 的> * - [__ NSArrayM insertObject:atIndex:]: 对象不能为零
如果我尝试打开UINavigationController
本身,它可以正常工作......但是如何将数据传递给StoreViewController
本身?
答案 0 :(得分:0)
让我们试试这些解决方案:
在视图控制器中销毁webview的委托:
-(void)dealloc{ self.yourWebView.delegate = nil}
停止来自webView的请求:
-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
StoreViewController *controller = [[StoreViewController alloc] init];
[self presentViewController:controller animated:YES completion: nil];
//stop loading here
[webview stopLoading];
return NO;
}
仔细检查新视图控制器,你有没有将其元素分配给nil的数组
希望这有助于你
答案 1 :(得分:0)
让我们逐一解决问题:
[webView stopLoading];
传递数据:如果在StoreViewController.h中声明所需数据,则可以在初始化视图控制器时轻松设置它们。
StoreViewController *controller = [[StoreViewController alloc] init];
controller.myStringData = @"Required Data";
controller.myDataDictionary = someDictionary;
您将能够使用viewDidLoad
StoreViewController
方法获取数据
希望这有帮助。