2009-05-28 4 views
1

私は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がインスタンス化されるとその行にトラフィックがあります。だから、私はそれがページを読み込んでいると思うが、表示されていない?

ありがとうございます。

答えて

3

ここに見て2つのものがあります

  1. は、親のサイズが変更されたときにWeb表示のサイズを変更するためにUIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeightにウェブビューのautoresizingMaskを設定するには。デフォルトでは、作成した親UIViewとUIWebViewの両方でフレーム(0,0,0,0)がゼロになっているためです。これを設定すると、画面に進む前に親のサイズを変更すると、Webビューはサイズが変更されて一致するようになります。
  2. 別のUIViewインスタンスを使用しないでください。自分のUIWebViewインスタンスにself.viewを設定するだけです。

実際ににコントローラー内の別のビューが必要な場合を除き、2番目のオプションをお勧めします。また、上記のコードスニペットで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のmethocでインスタンスを解放すべきかどうかは必ずしも分かりません。 – Georges

関連する問題