UIWebView似乎没有加载页面

问题描述:

我有一个基于导航控制器的应用程序下载一个RSS提要,并在一个TableView中的项目标题。该部分起作用。当我点击文章标题时,我想将FeedArticleController的实例推送到导航堆栈上。 FeedArticleController loadView方法设置视图(因为我想学习如何以编程方式而不是使用IB)。这里的loadView:UIWebView似乎没有加载页面

- (void)loadView { 
    UIView *view = [[UIView alloc] init]; 
    self.view = view; 

    webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; 
    webView.delegate = self; 

    [view addSubview:webView]; 
} 

这有道理吗? 现在,让webView的实际加载的页面,我有这样的viewDidLoad方法:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]]; 
} 

然后,我有委托方法,webViewDidStartLoad和webViewDidFinishLoad。他们只是打印到NSLog。

我错过了我如何构建和添加视图?代理方法似乎在延迟后打印到日志中,并且在webView实例化时线路上存在流量。所以,我认为这是加载页面,但没有显示?

谢谢你们。

有寻找到这里两件事情:

  1. 设置Web视图的autoresizingMaskUIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight使Web视图调整大小时,其父被调整。这是因为默认情况下,您创建的父UIView和UIWebView都具有归零帧(0,0,0,0)。通过设置这一点,当父屏幕在屏幕上前调整大小时,网页视图将被调整大小以匹配。
  2. 不要使用单独的UIView实例,只需将self.view设置为您的UIWebView实例。

我推荐第二个选项,除非你真的需要你的控制器里面的另一个视图。另外,我应该在这里指出你在上面的代码片段中泄漏了UIView和UIWebView。这可能会简化,但如果不是,则应在分配视图后释放视图。以下是实施上述解决方案2的示例:

- (void) loadView 
{ 
    webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; 
    webView.delegate = self; // weak reference: doesn't retain self 
    self.view = webView;  // strong reference: retains webView 
    [webView release];   // release initial reference: now 'owned' through self.view 
} 
+0

感谢您的评论。我并不总是确定是否应该在创建它的方法或类的dealloc方法中释放实例。 – Georges 2009-05-29 16:59:35