【问题标题】:Passing an NSURLRequest/NSURL to another UIViewController results in (null)将 NSURLRequest/NSURL 传递给另一个 UIViewController 会导致 (null)
【发布时间】:2011-09-05 20:48:08
【问题描述】:

我有两个 ViewController,它们都是 UIWebViewDelegates,其中一个我有一个 UIWebview,它基本上列出了一个数字链接。 第一个 ViewController 定义了这个方法:

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
    if (inType == UIWebViewNavigationTypeLinkClicked) {
        BrowserViewController *browserViewController = [[BrowserViewController alloc] init];
        [self.navigationController pushViewController:browserViewController animated:YES];
        browserViewController.URL = [inRequest URL];
        [browserViewController release];
        return NO;
    }
    return YES;
}

但是当我在第二个控制器的 viewDidLoad 中实际 NSLog URL 属性时,我总是得到 NSURL 的 (null)。 另外,如果我在上面的尾声中推送第二个控制器后立即执行 NSLog,它实际上出现在第二个控制器的 viewDidLoad 方法中的 NSLog 之后

任何人有任何想法,为什么会发生这种情况?

【问题讨论】:

    标签: ios uiviewcontroller nsurlrequest


    【解决方案1】:

    在 setURL 消息已经完成并返回到第一个控制器之前,您不会将它发送到第二个控制器。您需要按其他顺序执行此操作:

    -(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
     if (inType == UIWebViewNavigationTypeLinkClicked) {
        BrowserViewController *browserViewController = [[BrowserViewController alloc] init];
        browserViewController.URL = [inRequest URL];
        [self.navigationController pushViewController:browserViewController animated:YES];
        [browserViewController release];
        return NO;
      }
    return YES;
    }
    

    【讨论】:

    • 也不是这样工作的。出于某种原因,我可以在第二个控制器中访问 URL 的唯一方法是在 viewDidAppear 中。 viewDiDLoad 广告 viewWillAppear 不受影响,顺序似乎无关紧要。
    • 实际上,您建议的顺序似乎确实使其在 viewWillAppear 中可用。
    • 不能这样做,因为这不是 100% 正确的答案。我需要在 viewDidLoad 中设置这些变量。
    • 该控制器的视图是如何创建的?它是从 nib 文件加载的,还是以编程方式创建的?如果来自笔尖,它是在主笔尖中,还是在控制器启动时从辅助笔尖加载?我认为它是在此代码运行之前从笔尖加载的,因此无法在 viewDidLoad 中设置该变量。如果它必须是该委托方法,则需要延迟从 nib 加载视图,直到调用 pushViewController。
    • 所有视图都是以编程方式创建的,没有一个是从 NIB 加载的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2015-01-15
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2012-02-20
    • 2019-06-11
    相关资源
    最近更新 更多