将数据传递给内部导航控制器并打开ViewController

时间:2014-05-04 23:37:21

标签: ios webview

我有一个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本身?

2 个答案:

答案 0 :(得分:0)

让我们试试这些解决方案:

  1. 在视图控制器中销毁webview的委托:

    -(void)dealloc{ self.yourWebView.delegate = nil}
    
  2. 停止来自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;
    }
    
  3. 仔细检查新视图控制器,你有没有将其元素分配给nil的数组

  4. 希望这有助于你

答案 1 :(得分:0)

让我们逐一解决问题:

  • WebKit异常:您可以通过停止加载webview来解决此问题。只需致电[webView stopLoading];
  • 即可
  • 传递数据:如果在StoreViewController.h中声明所需数据,则可以在初始化视图控制器时轻松设置它们。

    StoreViewController *controller = [[StoreViewController alloc] init]; 
    controller.myStringData = @"Required Data"; 
    controller.myDataDictionary = someDictionary;
    

    您将能够使用viewDidLoad

  • StoreViewController方法获取数据

希望这有帮助。